基于数组字段的Mongodb按计数分组
我有以下数据。我想按数组中的字段分组基于数组字段的Mongodb按计数分组,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有以下数据。我想按数组中的字段分组 { "_id" : ObjectId("54e73137758646882f445383"), "items" : [ { "name" : "one", "quality" : "high" }, { "name" : "one", "quality" : "low" }, { "name" : "two",
{
"_id" : ObjectId("54e73137758646882f445383"),
"items" : [
{
"name" : "one",
"quality" : "high"
},
{
"name" : "one",
"quality" : "low"
},
{
"name" : "two",
"quality" : "high"
}
]
}
/* 1 */
{
"_id" : ObjectId("54e73166758646882f445384"),
"items" : [
{
"name" : "two",
"quality" : "high"
},
{
"name" : "three",
"quality" : "low"
},
{
"name" : "four",
"quality" : "medium"
}
]
}
我想按名称和质量分组,我想得到计数
这就是我尝试过的
db.testColl.aggregate( {$group : {
_id : {itemsName : "$items.name" ,itemsQuality : "$items.quality" },
count : {$sum : 1}
}})
我得到的结果是
{
"result" : [
{
"_id" : {
"itemsName" : [
"two",
"three",
"four"
],
"itemsQuality" : [
"high",
"low",
"medium"
]
},
"count" : 1
},
{
"_id" : {
"itemsName" : [
"one",
"one",
"two"
],
"itemsQuality" : [
"high",
"low",
"medium"
]
},
"count" : 1
}
],
"ok" : 1
}
预期结果:
{
"result" : [
{
"_id" : {
"itemsName" : one,
"itemsQuality" : high
},
"count" : 1
},
{
"_id" : {
"itemsName" : one,
"itemsQuality" : low
},
"count" : 1
},
{
"_id" : {
"itemsName" : two,
"itemsQuality" : high
},
"count" : 2
},
....
],
"ok" : 1
}
可能吗?如果是这样的话,你能帮我吗?
如果不可能,请更正我的结构以获得结果。尝试此操作将解决您的问题
db.collectionName.aggregate({
"$unwind": "$items"
}, {
"$group": {
"_id": {
"itemsName": "$items.name",
"itemsQuality": "$items.quality"
},
"count": {
"$sum": 1
}
}
})