我有一个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 的文档。类似地,对于阵列中的所有对象。
答案 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"]} }} })