MongoDB使用$and和$nor运算符查找查询
我有一个收藏如下MongoDB使用$and和$nor运算符查找查询,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个收藏如下 { "_id" : ObjectId("55bec0793bed809b2cb658ad"), "lock_1" : ["desc_1","desc_2"], "lock_2" : ["desc_1"] }, { "_id" : ObjectId("55bec0793bed809b2cb658ab"), "lock_1" : ["desc_1","desc_2","desc_3"], "lock_2" : ["desc_1"] }
{
"_id" : ObjectId("55bec0793bed809b2cb658ad"),
"lock_1" : ["desc_1","desc_2"],
"lock_2" : ["desc_1"]
},
{
"_id" : ObjectId("55bec0793bed809b2cb658ab"),
"lock_1" : ["desc_1","desc_2","desc_3"],
"lock_2" : ["desc_1"]
}
{
"_id" : ObjectId("55bec0793bed809b2cb658ac"),
"lock_1" : ["desc_1"],
"lock_2" : []
},
{
"_id" : ObjectId("55bec0793bed809b2cb658ae"),
"lock_1" : [],
"lock_2" : ["desc_1"]
},
{
"_id" : ObjectId("55bec0793bed809b2cb658aj"),
"lock_1" : ["desc_3","desc_4"],
"lock_2" : ["desc_5"]
},
{
"_id" : ObjectId("55bec0793bed809b2cb658ak"),
"lock_1" : [],
"lock_2" : []
}
通过使用下面的查询,我检索了所有在“lock_1”和“lock_2”数组中都有“desc_1”的文档,返回了前两个文档,这是正确的
db.locks.find( { $and: [ {lock_1 : "desc_1"} , {lock_2 : "desc_1"} ] } )
现在,我正在尝试获取不满足上述条件的文档。我尝试使用下面的查询,但它返回最后两个文档
db.locks.find( { $nor: [ {lock_1 : "desc_1"} , {lock_2 : "desc_1"} ] } )
如何检索“desc_1”不存在或在其中一个数组中存在的文档
db.locks.find({
$or: [
{ lock_1 : { $nin: [ "desc_1" ] }} ,
{ lock_2 : { $nin: [ "desc_1" ] }}
]
})
参考:
这里需要的是执行逻辑或操作的运算符和直接测试字段内容的运算符
db.locks.find({
“$or”:[
{“lock_1”:{“$ne”:“desc_1”},
{“lock_2”:{“$ne”:“desc_1”}
]
})
我认为这比我的答案要好。在这种情况下,最好使用$ne而不是$nin。