2016-12-25 66 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); 
    } 
});