我想将多个文档中的值合并为一个。
原始文件:
{'a': 1, 'b': 2}
{'a': 100, 'b': 200}
所需的输出:
{'a': [1, 100], 'b': [2, 200]}
管道小组\项目可以帮助我吗?
答案 0 :(得分:1)
您需要使用$objectToArray和$$ROOT
变量将文档转换为数组。然后,您可以运行$group两次以获取包含所有数组的单个文档。在最后一步中,您可以将$replaceRoot与$arrayToObject一起运行,以获取a,b..
作为文档密钥。
db.collection.aggregate([
{
$project: {
_id: 0
}
},
{
$project: {
data: { $objectToArray: "$$ROOT" }
}
},
{ $unwind: "$data" },
{
$group: {
_id: "$data.k",
vals: { $push: "$data.v" }
}
},
{
$group: {
_id: null,
aggregates: { $push: { k: "$_id", v: "$vals" } }
}
},
{
$replaceRoot: {
newRoot: { $arrayToObject: "$aggregates" }
}
}
])