分组文档和合并子文档数组

时间:2015-02-20 20:53:49

标签: mongodb mongodb-query aggregation-framework

我正在尝试按字段对文档进行分组,并合并其他字段的数组。

实施例: 来源

[{
   "city": "NY",
   "size": [1,2,3,4,5],
   "tags": ["a","b","c","d"]
},
{
   "city": "NY",
   "size": [],
   "tags": ["c","d","z"]
},
{
   "city": "NY",
   "size": [1,2,10],
   "tags": []
}]

数组字段也可以是子文档的数组,可以是空的或有价值的。我希望按名称分组并合并"尺寸"和"标签"领域。 到目前为止,我这样做了:

aggregate({"$group":{
            _id: "$city",
            size: { "$addToSet": "$size"},
            tags: { "$addToSet": "$tags"}
        });

但它不像我想的那样合并le数组。它返回;

{
   _id:"NY",
   size:[[1,2,3,4,5],[1,2,10]],
   tags:[["a","b","c","d"],["c","d","z"]]
}

如果我在"尺寸"和"标签"它只是忽略第一个和第二个文档,因为它们的一个数组是空的。

以下是我希望获得的内容:

{
    _id:"NY",
    size:[[1,2,3,4,5,10]].
    tags:["a","b","c","d","z"]
}

更新
这是一个建议givin那种工作,但不完全(可能对某些人有帮助)

此外,有人提出了哪种工作但不完全

的答案
db.test.aggregate([
            {
                $group: {
                    _id: "$city",
                    tags: {
                        "$addToSet": "$tags"
                    },
                    size: {
                        "$addToSet": "$size"
                    }
                }
            },
            {
                $unwind: "$tags"
            }, {
                $unwind: "$tags"
            }, {
                $unwind: "$size"
            }, {
                $unwind: "$size"
            },
            {
                $group: {
                    _id: "$_id",
                    tags: {
                        "$addToSet": "$tags"
                    },
                    size: {
                        "$addToSet": "$size"
                    }
                }
            }
]);

0 个答案:

没有答案