我的数据:
{ "_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 }
求解决方案!!
Use $unwind:
I found the solution. It turned out to be using the $unwind function