Node.js 如何使用$lookup和DbRef连接MongoDB和NodeJS中的两个集合?
如果我有两个集合,其中一个集合有dbref,那么如何使用$lookup和dbref进行连接?dbref是一个BSON对象,不能使用其值进行查找 但是,有一种方法可以做到这一点,将DBRef对象转换为数组。 简短解释 假设您有如下DBRef对象: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.
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
的另一个原因是“邪恶”。不要使用它。它可能会重复