我想找到一个与姓名或护照匹配的记录,并且该记录未被暂停:
Person.find({'$or': [{name: name},
{passportNo: passportNo}
],
"$and":[{suspended: false}]
}, function(err, result){
我没有记录,我做得对吗?
答案 0 :(得分:1)
$and
语句应该在开头,并且应该包含两个单独的条件(记录未被暂停)和(名称或护照匹配的OR语句)
{"$and":[{suspended: false}, {'$or': [{name: name}, {passportNo: passportNo}]}] }
*****更新
这是基于以下逻辑的更新声明
(名称字段匹配AND暂挂为false)或(passportNo字段匹配AND暂停为false)
{"$or":[{'$and': [{name: name}, {suspended: false}]}, {'$and': [{passportNo: passportNo}, {suspended: false}]}] }
这与您正在寻找的逻辑相匹配吗?
******更新2
此查询现在正在检查是否为
(暂停的字段存在且其值为false且名称或护照字段匹配)
或(暂停的字段不存在且名称或护照字段匹配)
{
'$or': [
{"$and":[
{ "suspended": { $exists: true, $in: [ false ] } },
{'$or': [{"name": name}, {"passportNo": passportNo}]} ]
},
{"$and":[
{ "suspended": { $exists: false } } ,
{'$or': [{"name": name}, {"passportNo": passportNo}]} ]
} ]
}
答案 1 :(得分:1)
如果问题是
查找所有文档(
name
为X或passportNo
为Y)和(suspended
为false
或不存在)
使用以下查询:
{
"$and" : [
{ "$or" : [
{ "name" : X },
{ "passportNo" : Y }
] },
{ "$or" : [
{ "suspended" : false },
{ "suspended" : { "$exists" : false } }
] }
]
}
默认情况下,您应该将suspended
设置为false
来简化您的生活,因此查询可以只是
{
{ "$or" : [{ "name" : X }, { "passportNo" : Y } ] },
{ "suspended" : false },
}