2016-12-25 68 views
0

我有這個代碼基於兩個ID搜索文檔。如何查詢貓鼬,使搜索必須匹配兩個ID

User.find({ 
    $or: [ 
     { id: req.body.myId }, 
     { id: req.body.id } 
    ] 
}, function(err, users) { 
    console.log(users) 
}); 

這工作得很好,但是,讓我們假設req.body.myId是不確定的,那麼它會抓住唯一req.body.id匹配的所有文件。我需要它是這樣的,如果它不能找到任何有關一個ID的文件,那麼它不應該爲另一個ID抓取任何東西,從而返回一個空的用戶數組。

回答

3

執行查詢之前,請檢查和不執行它,如果參數之一是未定義,所以你不會對MongoDB進行不必要的調用。喜歡的東西:

if (!req.body.myId || !req.body.id) { 
    // return here empty array or whatever 
} 

通過你的情況的方式通常$in運算符用於:

User.find({ 
    id: { 
     $in: [req.body.myId, req.body.id] 
    } 
}, function(err, users) { 
    console.log(users) 
}); 
+0

+我使用'$ in'運營商,我才懶得改變原來'$或'在我的答案下面;) – rsp

+0

$看起來好多了,謝謝 – Ryan

1

這是一個奇怪的規定,但確定:

function findByTwoIds(id1, id2, callback) { 
    if (!id1 || !id2) { 
     callback(null, []); 
    } else { 
     User.find({ 
      $or: [ 
       { id: id1 }, 
       { id: id2 } 
      ] 
     }, callback); 
    } 
} 

,並使用它:

findByTwoIds(req.body.myId, req.body.id, function (err, users) { 
    if (err) { 
     console.log('Error:', err); 
    } else { 
     console.log(users); 
    } 
});