我正在尝试按字段对文档进行分组,并合并其他字段的数组。
实施例: 来源
[{
"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"
}
}
}
]);