如何在Mongodb中拉出嵌套对象?

时间:2019-05-25 04:17:57

标签: mongodb mongoose

我正在尝试通过合并另一个集合来进行查询,但是运行查询时会遇到障碍,生成的数据不是我想像的

我有这样的数据

{
        "_id": "5ce8981a46039c14a4ec32d1",
        "name": "Monkey D Luffy",
        "email": "aaa@aaa.com",
        "status": "not verified",
        "password": "$2a$10$ayluBIsOOelBTIk.69GjHubgQemr6dJfgBUELNusCOaUGLpS/qKs6",
        "metas": {
            "role": "admin",
            "smartphone": "ios",
            "address": "konoha",
            "hobby": "eat ramen"
        }
    },

我想从嵌套文档中提取元数据:

{
        "_id": "5ce8981a46039c14a4ec32d1",
        "name": "Monkey D Luffy",
        "email": "aaa@aaa.com",
        "status": "not verified",
        "password": "$2a$10$ayluBIsOOelBTIk.69GjHubgQemr6dJfgBUELNusCOaUGLpS/qKs6",
        "role": "admin",
        "smartphone": "ios",
        "address": "konoha",
        "hobby": "eat ramen"
    },

如果我的问题中有任何重复之处提示我,因为我没有找到相同的问题,主要是使用数组。

这是我的查询:

db.accounts.aggregate([
    {
        $lookup: {
            from: "account_meta",
            localField: "_id", 
            foreignField: "account_id",
            as: "metas"
        }
    },

    { "$unwind": "$metas" },
    {
        $group: {
            _id: "$_id",
            name: {$first:"$name"},
            status: {$first: "$status"},
            email: {$first: "$email"},
            password: {$first: "$password"},
            data: {
                "$push": {
                    "k" : "$metas.key",
                    "v": "$metas.value"
                }
            }
        }
    },
    {
        $project: {
            "_id": "$_id", 
            "name": "$name", 
            "email": "$email", 
            "status": "$status", 
            "password": "$password",
            "metas" :{
                $arrayToObject: "$data"
            }
        }
    },
    {
        "$replaceRoot": {

            "newRoot":

                {
                    "$mergeObjects": [ {$arrayToObject: "$data"}, "$$ROOT"]
                },

        }
    },
])

1 个答案:

答案 0 :(得分:4)

我只是从$ mergeObject编辑一些代码:

{
        "$replaceRoot": {

            "newRoot":

                {
                    "$mergeObjects": [ "$metas", "$$ROOT"]
                },

        }
},
{$project: { metas: 0} }