如何在Mongodb中拉出嵌套对象? [英] How to Pull Out nested Objects in Mongodb?

查看:423
本文介绍了如何在Mongodb中拉出嵌套对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to make a query by merging from another collection, but there are obstacles when the query is run, the data generated is not what I imagined

我有这样的数据

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

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

and i want pull out metas from nested document :

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

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

if any duplicate from my question pls suggest me, because I didn't find the same question, mostly using arrays.

这是我的查询:

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

        }
    },
])

推荐答案

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

i just edit some code from my $mergeObject:

{
        "$replaceRoot": {

            "newRoot":

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

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

这篇关于如何在Mongodb中拉出嵌套对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆