带有可能的null参数的find()语句

时间:2017-01-28 17:32:41

标签: node.js mongodb express mongoose mongodb-query

我正在试图弄清楚Mongoose和MongoDB是如何工作的......我对它们真的很新,我似乎无法想象如何基于find语句返回值,其中一些给定的参数在查询中可能是null - 是否有我可以为此设置的属性?

为了进一步解释,我有一个网页,其中包含用于搜索公司的不同输入字段,但它们并非都是强制性的。

$0:
   $A00;

通过填写网页上的所有输入字段,我得到了一个结果,但只有那个匹配的特定结果。假设我只填写select name, sum(case when leavetype = 'casual' then Stock - Consumed else 0 end) as casual, sum(case when leavetype = 'earned' then Stock - Consumed else 0 end) as earned, sum(case when leavetype = 'sick' then Stock - Consumed else 0 end) as sick from leaverecord lr group by name; ,它什么都不返回,因为其余的都是空的,但我希望返回所有的行,例如在德国。我希望我表达得足够清楚。

2 个答案:

答案 0 :(得分:1)

您需要使用 $or 逻辑运算符包装查询,例如

var Company = mongoose.model('Company');
Company.find(
    {
        "$or": [
            { "companyName": req.query.companyName }, 
            { "position": req.query.position }, 
            { "areaOfExpertise": req.query.areaOfExpertise },  
            { "zip": req.query.zip }, 
            { "country": req.query.country }
        ]
    }, function(err, docs) {
        res.json(docs);
    }
);

另一种方法是构造一个检查空参数的查询,如果它们不为null,则将其作为查询的一部分包含在内。例如,您可以使用req.query对象作为查询,假设密钥与文档的字段相同,如下所示:

/* 

the req.query object will only have two parameters/keys e.g.
req.query = { 
    position: "Developer", 
    country: "France" 
}
*/
var Company = mongoose.model('Company');
Company.find(req.query, function(err, docs) {
    if (err) throw err;
    res.json(docs);
});

在上面,req.query对象充当查询并具有隐式逻辑AND操作,因为MongoDB在指定逗号分隔的表达式列表时提供隐式AND操作。当必须在多个表达式中指定相同的字段或运算符时,必须使用带 $and 运算符的显式AND。

如果您正在查询满足逻辑ANDOR的查询,即返回符合两个子句条件的所有文档,例如给出position和{{1}的查询或者任何其他字段,然后您可以将查询调整为:

country

但是,这可能会受到哪些查询参数需要加入为强制性等的影响。

答案 1 :(得分:0)

我最终删除了查询中的参数,以防它们为空。似乎提交中的所有文本字段都以""提交。 (空)。由于数据库中没有这样的值,因此不返回任何值。这么简单,我从未想过......

示例:

if (req.query.companyName == "") {
        delete req.query.companyName;
}