猫鼬 "and or" return 没有结果
mongoose "and or" return no result
我想找到与姓名或护照相匹配的记录,并且该记录未被暂停:
Person.find({'$or': [{name: name},
{passportNo: passportNo}
],
"$and":[{suspended: false}]
}, function(err, result){
我没有记录,我做的对吗?
$and
语句应位于开头,并且应包含两个单独的条件(记录未暂停)和(姓名或护照匹配的 OR 语句)
{"$and":[{suspended: false}, {'$or': [{name: name}, {passportNo: passportNo}]}] }
*****更新
这里是根据以下逻辑更新的语句
(姓名字段匹配且暂停为假)或(passportNo 字段匹配且暂停为假)
{"$or":[{'$and': [{name: name}, {suspended: false}]}, {'$and': [{passportNo: passportNo}, {suspended: false}]}] }
这是否符合您正在寻找的逻辑?
****** 更新 2
此查询现在正在检查是否
(suspended 字段存在且其值为 false 且姓名或护照字段匹配)
或(暂停字段不存在且姓名或护照字段匹配)
{
'$or': [
{"$and":[
{ "suspended": { $exists: true, $in: [ false ] } },
{'$or': [{"name": name}, {"passportNo": passportNo}]} ]
},
{"$and":[
{ "suspended": { $exists: false } } ,
{'$or': [{"name": name}, {"passportNo": passportNo}]} ]
} ]
}
如果问题是
Find all documents where (name
is X or passportNo
is Y) and (suspended
is false
or not present)
使用以下查询:
{
"$and" : [
{ "$or" : [
{ "name" : X },
{ "passportNo" : Y }
] },
{ "$or" : [
{ "suspended" : false },
{ "suspended" : { "$exists" : false } }
] }
]
}
不过,您应该通过将 suspended
默认设置为 false
来简化您的生活,这样查询就可以是
{
{ "$or" : [{ "name" : X }, { "passportNo" : Y } ] },
{ "suspended" : false },
}
我想找到与姓名或护照相匹配的记录,并且该记录未被暂停:
Person.find({'$or': [{name: name},
{passportNo: passportNo}
],
"$and":[{suspended: false}]
}, function(err, result){
我没有记录,我做的对吗?
$and
语句应位于开头,并且应包含两个单独的条件(记录未暂停)和(姓名或护照匹配的 OR 语句)
{"$and":[{suspended: false}, {'$or': [{name: name}, {passportNo: passportNo}]}] }
*****更新
这里是根据以下逻辑更新的语句
(姓名字段匹配且暂停为假)或(passportNo 字段匹配且暂停为假)
{"$or":[{'$and': [{name: name}, {suspended: false}]}, {'$and': [{passportNo: passportNo}, {suspended: false}]}] }
这是否符合您正在寻找的逻辑?
****** 更新 2
此查询现在正在检查是否
(suspended 字段存在且其值为 false 且姓名或护照字段匹配)
或(暂停字段不存在且姓名或护照字段匹配)
{
'$or': [
{"$and":[
{ "suspended": { $exists: true, $in: [ false ] } },
{'$or': [{"name": name}, {"passportNo": passportNo}]} ]
},
{"$and":[
{ "suspended": { $exists: false } } ,
{'$or': [{"name": name}, {"passportNo": passportNo}]} ]
} ]
}
如果问题是
Find all documents where (
name
is X orpassportNo
is Y) and (suspended
isfalse
or not present)
使用以下查询:
{
"$and" : [
{ "$or" : [
{ "name" : X },
{ "passportNo" : Y }
] },
{ "$or" : [
{ "suspended" : false },
{ "suspended" : { "$exists" : false } }
] }
]
}
不过,您应该通过将 suspended
默认设置为 false
来简化您的生活,这样查询就可以是
{
{ "$or" : [{ "name" : X }, { "passportNo" : Y } ] },
{ "suspended" : false },
}