MongoDb模拟2个集合之间的连接

时间:2016-04-21 16:10:59

标签: mongodb

是否可以在MongoDb 3.0中模拟连接?

问题:

我有2个收藏品(A和B)。集合A中的文档具有引用集合B中的文档的密钥。

我想获取集合B中没有任何参考文档的所有文档。

1 个答案:

答案 0 :(得分:0)

以下是使用NodeJS的Mongoose驱动程序的示例。能够在shell中执行此操作没有任何帮助,所以这里是Mongooose:

var docsWithoutA = [];
var stream = db.colB.find({}).stream();
stream.on("data", function (doc) {
  colA.find({"_id": doc.referenceKeyHere}, function (err, docs) {
    if (err) return;
    if (!docs[0]) { docsWithoutA.push(doc) } //doc here is the doc from B with no find results in A
    //found at least one ref'd doc.
  })
})
stream.on("close", function () {
  console.log(docsWithoutA); //Stream closes, here is your list
})

这是一个临时加入,可以完成您的特定请求。

真正的答案是你永远不应该使用MongoDB进行连接,最好通过建立子文档来处理这个类的引用。更多信息:https://docs.mongodb.org/manual/

编辑:顺便说一下,我不再有信心能够告诉你如何在Mongo shell中执行此操作,因为我忘记了$ lookup现在在3.0中没有。其他人的回答(删除,我认为?)也遇到了这个问题。