Mongo DB在对象数组中使用不同的值组

时间:2016-11-05 11:34:25

标签: mongodb mongodb-query aggregation-framework mongodb-aggregation

假设我有一个类似下面的文档模型

{
"_id" : "QggaecdDWkZzMmmM8",
"features" : [ 
    {
        "language" : "en",
        "values" : [ 
            {
                "name" : "feature 1",
                "values" : [ 
                    "test", 
                    "best"
                ]
            }, 
            {
                "name" : "feature2",
                "values" : [ 
                    "guest", 
                    "nest"
                ]
            }
        ]
    }
}

现在我需要运行查询并返回唯一的名称和值对功能。就像一个文件有名称特征1与"测试"和最好的值,另一个文件具有相同的密钥(功能1具有不同的值,即" guest"),因此结果将是

name: featuer 1 
values: [test, best and guest]

直到现在我尝试了以下查询,但最后返回错误

db.getCollection('products').aggregate(
{$unwind: '$features'},
{$group: 
{_id: "$features.values.name"},
name: {$addToSet: '$name'}
})

错误消息是

  

exception:管道阶段规范对象必须只包含一个字段

1 个答案:

答案 0 :(得分:3)

名称字段应该在组阶段内,这就是您有错误的原因。

尝试此查询:

db.getCollection('products').aggregate([
    {
        $unwind: '$features'
    },
    {
        $unwind: '$features.values'
    },
    {
        $unwind: '$features.values.values'
    },
    {
        $group: {
            _id: "$features.values.name",
            values: {$addToSet: '$features.values.values'}
        },
    }
])

结果:

{ "_id" : "feature2", "values" : [ "nest", "guest" ] }
{ "_id" : "feature 1", "values" : [ "best", "test" ] }