【问题标题】:How to Pull Out nested Objects in Mongodb?如何在 Mongodb 中拉出嵌套对象?
【发布时间】:2019-05-25 14:11:33
【问题描述】:

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

我有这样的数据

{
        "_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"]
                },

        }
    },
])

【问题讨论】:

  • 解决了 xD 我只是更改了 "$mergeObjects": [ '$metas', "$$ROOT"] 并在 $replaceRoot 之后添加了 $project : {metas: 0}
  • 请将答案发布为答案,而不是 cmets。另外,不要编辑问题标题;只需将答案标记为“已接受”即可。
  • 将答案标记为已接受?怎么办?
  • 嗯,首先你需要实际发布一个答案。再次,请停止编辑您的问题;只需发布一个单独的答案。
  • 接受答案见meta.stackexchange.com/questions/5234/…。您可能需要等待两天才能接受自己的答案。

标签: mongodb mongoose


【解决方案1】:

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

{
        "$replaceRoot": {

            "newRoot":

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

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

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 2016-06-25
    • 2017-01-06
    • 2021-01-23
    • 1970-01-01
    相关资源
    最近更新 更多