我想找到名稱或護照匹配的記錄,該記錄未掛起:貓鼬「和或」不返回結果
Person.find({'$or': [{name: name},
{passportNo: passportNo}
],
"$and":[{suspended: false}]
}, function(err, result){
我沒有得到任何記錄,我在做正確嗎?
我想找到名稱或護照匹配的記錄,該記錄未掛起:貓鼬「和或」不返回結果
Person.find({'$or': [{name: name},
{passportNo: passportNo}
],
"$and":[{suspended: false}]
}, function(err, result){
我沒有得到任何記錄,我在做正確嗎?
的$and
的說法應該是在開始和應該包含兩個獨立的條件(記錄沒被暫停)或(和聲明,其中名字或護照相符)
{"$and":[{suspended: false}, {'$or': [{name: name}, {passportNo: passportNo}]}] }
*****更新
這是基於以下邏輯
(名稱字段匹配和懸浮是假的),或更新語句(passportNo場比賽和懸浮是假的)
{"$or":[{'$and': [{name: name}, {suspended: false}]}, {'$and': [{passportNo: passportNo}, {suspended: false}]}] }
這是否符合您所尋找的邏輯?
******更新2
這個查詢現在正在檢查是否
(懸浮場存在,它的值是假的和名字或護照場比賽)
OR(懸浮場做不存在,名字或護照場比賽)
{
'$or': [
{"$and":[
{ "suspended": { $exists: true, $in: [ false ] } },
{'$or': [{"name": name}, {"passportNo": passportNo}]} ]
},
{"$and":[
{ "suspended": { $exists: false } } ,
{'$or': [{"name": name}, {"passportNo": passportNo}]} ]
} ]
}
如果問題是
找到所有實況發言:其中(
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 },
}
如果暫停字段未定義會怎樣? – Alvin 2015-02-05 15:29:28
你的第一個是正確的,唯一的問題是當掛起的字段不在數據庫中時,它不會返回任何結果。 – Alvin 2015-02-05 15:44:36