简体   繁体   中英

How to Join two collections in MongoDB and NodeJS with $lookup and DbRef?

如果我有两个集合,其中一个有dbref,如何使用$ lookup和dbref加入?

DBref is a BSON Object and you cannot make a lookup using its value.

BUT, there is a way to do it, transforming a DBRef object into an array. I have written an answer a few months ago describing how to do it.

Short explanation

Say you have DBRef object like this :

myField: DBRef("otherCollection", ObjectId("582abcd85d2dfa67f44127e0")),

Use $objectToArray on myField like this

db.myColl.aggregate([
    {
        $project: { 
            transformedDBRef: {$objectToArray: "$myField"},                
            }    
    },    
])

The result would be an array of two objects, one object for the reference, one for the ObjectId contained within the DBRef, each with a field "k" and a field "v". It will look like this:

transformedDBRef: [{"k" : "$ref","v" : "otherCollection"},{"k" : "$id","v" : ObjectId("582abcd85d2dfa67f44127e0")}

You can then grep the ObjectId. For the complete solution, please check the link above.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM