使用聚合操作,您无法获得所需的精确输出。聚合管道的一个限制是无法将 values
转换为输出文档中的 keys
。
例如,Kannur
是输入文档中 location
字段的一个值。在所需的输出结构中,它需要成为 key("kannur":1)
。使用聚合操作无法实现此目标。虽然这可以通过使用 map-reduce
实现,但是您可以使用聚合操作获得一个非常相关和有用的结构。
Unwind
位置数组。
Group
按位置字段分组,使用 $sum 运算符获取各个位置的计数。
- 再次对所有文档进行
Group
,以获得结果的汇总数组。
代码:
db.collection.aggregate([
{$unwind:"$location"},
{$group:{"_id":"$location","count":{$sum:1}}},
{$group:{"_id":null,"location_details":{$push:{"location":"$_id",
"count":"$count"}}}},
{$project:{"_id":0,"location_details":1}}
])
示例输出:
{
"location_details" : [
{
"location" : "Ballary",
"count" : 1
},
{
"location" : "Mysore",
"count" : 1
},
{
"location" : "Bengaluru",
"count" : 1
},
{
"location" : "Chennai",
"count" : 2
},
{
"location" : "Hyderabad",
"count" : 2
},
{
"location" : "Kannur",
"count" : 1
}
]
}