【问题标题】:How to Join two collections in MongoDB and NodeJS with $lookup and DbRef?如何使用 $lookup 和 DbRef 加入 MongoDB 和 NodeJS 中的两个集合?
【发布时间】:2016-07-26 10:12:11
【问题描述】:

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

【问题讨论】:

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

标签: node.js mongodb join dbref


【解决方案1】:

DBref 是一个 BSON 对象,您不能使用它的值进行查找。

但是,有一种方法可以做到这一点,将 DBRef 对象转换为数组。 I have written an answer a few months ago describing how to do it.

简短说明

假设你有这样的 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。如需完整的解决方案,请查看上面的链接。

【讨论】:

    猜你喜欢
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    相关资源
    最近更新 更多