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

Ada*_*edi 3 mongodb

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

{
    "phone":"123",
    "friends": {
                    "contacts":{
                                    "234":2,
                                    "345":5
                               }
               }
}
Run Code Online (Sandbox Code Playgroud)

我希望输出看起来像:

{
    "123": {
                "234":2,
                "345":5
           }
}
Run Code Online (Sandbox Code Playgroud)

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

mic*_*ckl 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" }
        }
    }
])
Run Code Online (Sandbox Code Playgroud)