我正在试图弄清楚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;
,它什么都不返回,因为其余的都是空的,但我希望返回所有的行,例如在德国。我希望我表达得足够清楚。
答案 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。
如果您正在查询满足逻辑AND
和OR
的查询,即返回符合两个子句条件的所有文档,例如给出position
和{{1}的查询或者任何其他字段,然后您可以将查询调整为:
country
但是,这可能会受到哪些查询参数需要加入为强制性等的影响。
答案 1 :(得分:0)
我最终删除了查询中的参数,以防它们为空。似乎提交中的所有文本字段都以""提交。 (空)。由于数据库中没有这样的值,因此不返回任何值。这么简单,我从未想过......
示例:
if (req.query.companyName == "") {
delete req.query.companyName;
}