使用多个键查询Mongo Db $

时间:2016-11-23 13:50:06

标签: mongodb

我有一个Mongo db文档集合,其中包含 _id 版本以及许多其他字段。我有一个id的数组:

["1A", "2b", "3C", "4D"]

如果我想要包含上述任何id的所有文档,我可以查询:

{
  _id : {
         $in: ["1A", "2b", "3C", "4D"]
        }
}

我想知道除了 _id 之外我们是否还可以查询另一个条件,即带有条件的上述数组,如下所示:

{
      $in: [{"id":"1A","version":"1.1"},{"id":"2B","version":"2.1"},{"id":"3C","version":"3.1"},{"id":"4D","version":"4.1"}]
        }
}

{“id”:“1A”,“version”:“1.1”} 的示例: 我希望所有 id为1A 版本为1.1 的文档。类似地,对于阵列中的所有对象。

3 个答案:

答案 0 :(得分:3)

您可以尝试这样的事情:

 db.collection.find(
   {
     //this OR will make sure that you get at any matching combination
     $or:[
       {"<FIELD1>": "<VALUE1.1>", "<FIELD2>": "<VALUE1.2>"},
       {"<FIELD1>": "<VALUE2.1>", "<FIELD2>": "<VALUE2.2>"}
     ]
    }
 )

以上 $和的文档可用here

此外还有其他运营商,例如 $或 $ not here

答案 1 :(得分:2)

显示包含两个值的示例。您可以添加所需的任意数量。使用$或$和运算符来实现多键。

  tinymce.init({
    selector: '.editable',
    plugins: "link",
    inline: true,
    init_instance_callback: function (editor) {
      editor.on('GetContent', function (e) {
        console.log(e.content);
      });
    }
  });

更新以在对象数组中包含搜索。

样品采集:

find({
    "$or": [{
        "$and": [{
            "_id": "1A"
        }, {
            "version": "1.1"
        }]
    },{
        "$and": [{
            "_id": "2B"
        }, {
            "version": "2.1"
        }]
    }]
})

查询:

db.multikeys.insertMany([{
    _id: 1,
    tags: [{
        _id: "1A",
        version: "1.1"
    }, {
        _id: "2B",
        version: "1.4"
    }]
}, {
    _id: 2,
    tags: [{
        _id: "2B",
        version: "2.1"
    }, {
        _id: "3C",
        version: "3.1"
    }]
}])

示例输出:

db.multikeys.find({
    tags: {
        $elemMatch: {
            $or: [{
                _id: "2B",
                version: "2.1"
            }, {
                _id: "1A",
                version: "1.1"
            }]
        }
    }
}).pretty()

答案 2 :(得分:1)

您需要使用$elemMatch来匹配两个条件,例如

db.collection1.find(
   { arrayObjectKeyName: { $elemMatch: { id: "1A", version: "1.1" } } }
)

当然,这是一个这样的例子

db.collection1.find({ "arrayObjectKeyName": {"$elemMatch":{"id": "1A","version":{"$in":["1.1","1.3","1.9876"]}  }} })