我的數據:
{
"_id" : ObjectId("542911f4d7054ab6ee0de476"),
"name" : "policy2",
"url" : [ "www.url22.com", "www.url21.com" ],
"countries" : [
{ "country" : "USA" },
{ "country" : "GER" }
]
}
我想單獨group by countries.country字段,單獨統計USA出現幾次,China出現幾次,而不是[USA,GER]在一起出現幾次,如下:
{ "_id" : "China", "total" : 1 }
{ "_id" : "USA", "total" : 2 }
{ "_id" : "GER", "total" : 1 }
{ "_id" : "JP", "total" : 1 }
我嘗試使用aggregate
db.policy.aggregate({$group:{_id:"$countries.country",total:{$sum:1}}})
但是得到的結果是countries合在一起的統計結果:
{ "_id" : [ "China" ], "total" : 1 }
{ "_id" : [ "USA", "JP" ], "total" : 1 }
{ "_id" : [ "USA", "GER" ], "total" : 1 }
求解決方案! !
PHP中文网2017-04-24 09:15:05
使用 $unwind:
db.policy.aggregate([
{ $unwind: '$countries' },
{ $group: { _id: '$countries.country', total: { $sum: 1 } } }
]);
天蓬老师2017-04-24 09:15:05
我找到解決方案了原來是使用$unwind函數
> db.policy.aggregate([{$unwind:"$country"},{$group:{_id:"$country",total:{$sum:1}}}])