Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于数组字段的Mongodb按计数分组_Mongodb_Aggregation Framework - Fatal编程技术网

基于数组字段的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
    }
    }
})