SUR*_*AJU 9 mongodb aggregation-framework
我有一个类似的mongo文件
{ "_id" : 12, "location" : [ "Kannur","Hyderabad","Chennai","Bengaluru"] }
{ "_id" : 13, "location" : [ "Hyderabad","Chennai","Mysore","Ballary"] }
Run Code Online (Sandbox Code Playgroud)
从这里我如何获得位置聚合(不同的区域计数).就像是
Hyderabad 2,
Kannur 1,
Chennai 2,
Bengaluru 1,
Mysore 1,
Ballary 1
Run Code Online (Sandbox Code Playgroud)
Bat*_*eam 11
使用聚合,您无法获得所需的确切输出.聚合管道的一个限制是它无法转换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}}
])
Run Code Online (Sandbox Code Playgroud)
样本o/p:
{
"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
}
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6797 次 |
| 最近记录: |