【问题标题】:Mongodb aggregate, group and count instancesMongodb聚合、分组和计数实例
【发布时间】:2013-11-23 10:00:43
【问题描述】:

我有一个如下所示的文档:

{
    "_id" : ObjectId("527a6b7c24a8874c078b9d10"),
    "day" : 6,
    "hour" : 15,
    "hourlyLocations" : [
        {
            "countryName" : "Spain",
            "countryCode" : "ES",
            "cityName" : "Madrid",
            "latitude" : 40,
            "longitude" : -4
        },
        {
            "countryName" : "United Kingdom",
            "countryCode" : "GB",
            "cityName" : "Soest",
            "latitude" : 51.5,
            "longitude" : -0.13
        }
    ],
    "minute" : 18,
    "month" : 11,
    "year" : 2013
}

“hourlyLocations”是一系列嵌入文档(为简洁起见,此处仅显示两个)。

我正在尝试运行一个聚合,它将返回每个国家、该国家的所有城市(一次)以及每个城市的实例数。

这是我目前所得到的:

db.hourly.aggregate(
[
    { "$project" : { "hourly" : "$hourlyLocations" } },
    { "$unwind" : "$hourly" },
    { "$group" : { "_id" : { "country" : "$hourly.countryName" }, "city" : { "$push" : "$hourly.cityName" } } },
]
)

这会返回类似:

{
        "_id" : {
            "country" : "Italy"
        },
        "city" : [
            "Manzano",
            "Cologno Monzese",
            "Rome",
            "Manzano",
            "Cologno Monzese",
            "Venice",
            "Milan",
            "Rome",
            "Milan",
            "Manzano",
            "Cologno Monzese",
            "Venice",
            "Milan",
            "Rome",
            "Milan",
            "Manzano",
            "Cologno Monzese",
            "Venice",
            "Milan",
            "Rome",
            "Manzano",
            "Cologno Monzese",
            "Venice",
            "Milan",
            "Casalnuovo di Napoli",
            "Manzano",
            "Cologno Monzese",
            "Venice",
            "Milan",
            "Casalnuovo di Napoli",
            "Milan"
        ]
    }

所以我得到了按城市分组的所有城市的所有实例。我现在要做的是按每个城市的实例数进行分组和计数。像这样的:

{
        "_id" : {
            "country" : "Italy"
        },
        "city" : [
            "Casalnuovo di Napoli" : "12"
            "Cologno Monzese" : "10",
            "Manzano" : "9",
            "Milan" : "6",
            "Rome" : "3",
            "Venice" : "1"
        ]
    }

我已经尝试了一些方法,但都无法做到正确。如何根据需要获取每个国家/地区的每个城市的计数?

非常感谢,

尼克。

【问题讨论】:

    标签: mongodb aggregation-framework


    【解决方案1】:

    试试:

    db.hourly.aggregate(
    [
        { "$project" : { "hourly" : "$hourlyLocations" } },
        { "$unwind" : "$hourly" },
        { $group: { _id: { country: "$hourly.countryName", city: "$hourly.cityName" }, count: { $sum: 1 } } },
        { $sort: { count: -1 } },
        {  $group: { _id: "$_id.country", cities: { $push: { city: "$_id.city", count: "$count"  } }  } }
    ]
    )
    

    这不是所要求的结构。相反,您会得到:

    {
        "_id" : {
            "country" : "Italy"
        },
        "cities" : [
            { "city": "Cologno Monzese", "count": 12},
            { "city": "Milan", "count": 6},
            { "city": "Rome", "count": 3},
        ]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 2014-02-27
      • 2020-11-09
      • 2016-12-25
      • 2015-02-14
      • 1970-01-01
      • 2021-04-19
      相关资源
      最近更新 更多