如何将文档转换为键值?

时间:2018-05-17 18:39:19

标签: mongodb mongodb-query aggregation-framework

好吧,我有这个结构的文件:

{
    "x" : "X1",
    "y" : 10
},
{
    "x" : "X2",
    "y" : 22
},
{
    "x" : "...",
    "y" : 42
}

那么,我如何将所有结果转换为:

{
    "X1" : 10,
    "X2" : 22,
    "X3" : 42
}

我尝试使用$arrayToObject$map,但这不起作用

谢谢!

  

这个系列有大约5000万个文档。

1 个答案:

答案 0 :(得分:1)

假设您的收藏量足够小,以便后续操作的输出不会超过16MB BSON limit,您可以使用以下聚合:

db.col.aggregate([
    {
        $group: {
            _id: null,
            docs: {
                $push: {
                    k: "$x",
                    v: "$y"
                }
            }
        }
    },
    {
        $replaceRoot: {
            newRoot: {
                $arrayToObject: "$docs"
            }
        }
    }
])

$arrayToObject期望对象具有两个属性kv。要将该对象提升为根级别,您可以使用$replaceRoot运算符。