У меня есть документ, который выглядит так:
{
"_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"
]
}
Я пробовал несколько вещей, но не смог сделать это правильно. Как я могу подсчитать количество городов в каждой стране по мере необходимости?
Большое спасибо,
Ник.