2015-02-05 79 views
0

我想找到名稱或護照匹配的記錄,該記錄未掛起:貓鼬「和或」不返回結果

Person.find({'$or': [{name: name}, 
        {passportNo: passportNo} 
        ], 
      "$and":[{suspended: false}] 
      }, function(err, result){ 

我沒有得到任何記錄,我在做正確嗎?

回答

1

$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}]} ] 
    } ] 
} 
+0

如果暫停字段未定義會怎樣? – Alvin 2015-02-05 15:29:28

+0

你的第一個是正確的,唯一的問題是當掛起的字段不在數據庫中時,它不會返回任何結果。 – Alvin 2015-02-05 15:44:36

1

如果問題是

找到所有實況發言:其中(name是X或passportNo是Y)和(suspendedfalse或不存在)

使用以下查詢:

{ 
    "$and" : [ 
     { "$or" : [ 
      { "name" : X }, 
      { "passportNo" : Y } 
     ] }, 
     { "$or" : [ 
      { "suspended" : false }, 
      { "suspended" : { "$exists" : false } } 
     ] } 
    ] 
} 

你應該通過設置suspended默認情況下,簡化你的生活false ,所以查詢可以只是

{ 
    { "$or" : [{ "name" : X }, { "passportNo" : Y } ] }, 
    { "suspended" : false }, 
}