mongo db-将值投影到向量中

时间:2019-11-20 10:07:40

标签: mongodb aggregation-framework pipeline

我想将多个文档中的值合并为一个。

原始文件:

{'a': 1, 'b': 2}

{'a': 100, 'b': 200}

所需的输出:

{'a': [1, 100], 'b': [2, 200]}

管道小组\项目可以帮助我吗?

1 个答案:

答案 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" }
        }
    }
])

Mongo Playground