MongoDB帮助获取集合A中的所有元素而不是集合B

时间:2017-05-25 16:17:35

标签: mongodb

如何编写mongo查询以使用集合B中不存在的特定参数获取集合A中的所有元素?

我有一个名为some_classes的集合,如下所示:

{
 { 
    "docid": "someID",
    "_id": objectId(somenumbers),
    "type": "X",
    "id_code": {
        "first": "364",
        "second": "143",
        "third": "Apple"
    }, 
  { 
    "docid": "someID",
    "_id": objectId(somenumbers),
    "type": "X",
    "id_code": {
        "first": "364",
        "second": "143",
        "third": "MH"
    }
}

我有另一个名为master_classes的集合,如下所示:

{
     { 
        "_id": objectId(somenumbers),
        "id_code": {
            "first": "364",
            "second": "143",
            "third": "MH"
        }, 
      { 
        "_id": objectId(somenumbers),
        "id_code": {
            "first": "364",
            "second": "143",
            "third": "ZH"
        }, 
    }

我需要在some_classes中获取docid =" someID"并输入=" x"那些没有匹配的" id_code"在master_classes中。

有没有一种有效的方法来实现这一目标?我想也许我可以使用聚合和查找来实现这一点,但我并不完全确定。

1 个答案:

答案 0 :(得分:1)

您无法在MongoDB中同时跨多个集合执行查询。您必须执行两个单独的查询,并使用$nin运算符过滤掉结果:

首先,您获得id_codes中所有不同的master_classes

const ids = db.master_classes.distinct("id_code")    

现在,您已将先前some_classes变量中已有id的结果倾斜:

db.some_classes.find({
    docid: "someID",
    type: "x",
    id_code: { $nin: ids }
});