项目值作为键,嵌入式文档作为mongo的值

时间:2018-11-26 07:41:57

标签: mongodb

在mongodb中,我有一个结构文件:

{
    "phone":"123",
    "friends": {
                    "contacts":{
                                    "234":2,
                                    "345":5
                               }
               }
}

我希望输出看起来像这样:

{
    "123": {
                "234":2,
                "345":5
           }
}

我正在寻找多种解决方案。似乎没有解决办法。

1 个答案:

答案 0 :(得分:6)

您可以使用$arrayToObject创建自定义键(以k-v对数组作为参数),然后可以使用$replaceRoot获取自定义根对象,请尝试:

db.collection.aggregate([
    {
        $match: {
            phone: { $exists: true },
            "friends.contacts": { $exists: true }
        }
    },
    {
        $addFields: {
            array: [{
                k: "$phone",
                v: "$friends.contacts"
            }]
        }
    },
    {
        $replaceRoot: {
            newRoot: { $arrayToObject: "$array" }
        }
    }
])