Mongo Lookup使用$ id参考加入集合

沙希·德希蒂(Shashi Deshetti)

我有一个名为post的集合,其中引用了另外两个集合:状态,格式

post:
{
    "_id" : ObjectId("5d7c1c4549c5e277395871ad"),
    "status" : {
        "$ref" : "status",
        "$id" : ObjectId("status123")
    },
    "format" : {
        "$ref" : "format",
        "$id" : ObjectId("format123")
    }
}

status:
{
    "_id" : ObjectId("status123"),
    "name" : "Draft"
}

format:
{
    "_id" : ObjectId("format123"),
    "name" : "Standard"
}

我想查询的帖子返回以下内容:

post:
{
    "_id" : ObjectId("5d7c1c4549c5e277395871ad"),
    "status" : {
        "_id" : ObjectId("status123"),
        "name" : "Draft"
    },
    "format" : {
        "_id" : ObjectId("format123"),
        "name" : "Standard"
    }
}

我的Mongo查询应该是什么?我是使用MongoDB的新手,非常感谢您的帮助。

谢谢莎士

汉王

对你的问题

你可以这样

 db.post.aggregate([
{$project :
           { status:
                    {$arrayElemAt:
                                  [{$objectToArray:"$status"},1]
                     },
            format:
                   {$arrayElemAt:
                                  [{$objectToArray:"$format"},1]
            }}},
{$project:
          {status:"$status.v" ,
          format:"$format.v"}
},

{$lookup : 
          {from :"status" ,
           localField : "status",
            foreignField:"_id" ,
           as :"status"}
},
{$lookup:
          {from :"format" ,
          localField:"format",
          foreignField:"_id",
           as:"format"}
},
{$unwind :"$status"},
{$unwind:"$format"}
])

结果看起来像

{ "_id" : ObjectId("5d7c1c4549c5e277395871ad"),
"status" : { 
           "_id" : ObjectId("5d7c4af7c45316e35251a499"),
             "name" : "Draft" 
            },
 "format" : { 
           "_id" : ObjectId("5d7c4b21c45316e35251a49a"),
            "name" : "Standard" 
           } 
}

说明

stage1:用于$objectToArray将文档转换为数组,我们用它转换DBref;
stage2:使用$arrayElemAtwith$project来获取链接的“ _id”。

stage3:用于$lookup连接两个集合
stage4:用于$unwind获取内部文档。从输入文档中解构数组字段以为每个元素输出文档。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章