Node.js 如何使用$lookup和DbRef连接MongoDB和NodeJS中的两个集合?

Node.js 如何使用$lookup和DbRef连接MongoDB和NodeJS中的两个集合?,node.js,mongodb,join,dbref,Node.js,Mongodb,Join,Dbref,如果我有两个集合,其中一个集合有dbref,那么如何使用$lookup和dbref进行连接?dbref是一个BSON对象,不能使用其值进行查找 但是,有一种方法可以做到这一点,将DBRef对象转换为数组。 简短解释 假设您有如下DBRef对象: myField: DBRef("otherCollection", ObjectId("582abcd85d2dfa67f44127e0")), 像这样在myField上使用$objectToArray db.

如果我有两个集合,其中一个集合有dbref,那么如何使用$lookup和dbref进行连接?

dbref是一个BSON对象,不能使用其值进行查找

但是,有一种方法可以做到这一点,将DBRef对象转换为数组。

简短解释 假设您有如下DBRef对象:

myField: DBRef("otherCollection", ObjectId("582abcd85d2dfa67f44127e0")),
像这样在myField上使用$objectToArray

db.myColl.aggregate([
    {
        $project: { 
            transformedDBRef: {$objectToArray: "$myField"},                
            }    
    },    
])
结果将是一个包含两个对象的数组,一个对象用于引用,一个对象用于DBRef中包含的ObjectId,每个对象都有一个字段“k”和一个字段“v”。它将如下所示:

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

然后可以grep ObjectId。要获得完整的解决方案,请查看上面的链接。

基本上没有。
$lookup
依赖于其他集合中的“匹配字段”。因此,如果一个字段是BSON类型
DBref
,另一个是
ObjectId
,那么这两个“类型”不相同,因此将不匹配。作为一个相关问题,
$lookup
无法使用
DBRef
中的数据,例如“集合”,您需要手动指定。因此,您“应该”使用常规的
ObjectId
值,而不是
DBRef
DBRef
的另一个原因是“邪恶”。不要使用它。它可能会重复