如何查询mongoose,使搜索必须匹配两个ID

时间:2016-12-25 23:56:59

标签: node.js mongodb mongoose

我有这个代码,它根据两个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获取任何东西,给予一个空的用户数组。

2 个答案:

答案 0 :(得分: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)
});

答案 1 :(得分: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);
    }
});