Node.js 具有可能为null参数的find()语句
我在想猫鼬和猫鼬是怎么工作的。。。我对他们真的很陌生,我似乎不知道如何基于find语句返回值,其中查询中的某些给定参数可能为null-是否有可以为此或其他设置的属性 为了进一步解释,我有一个网页,其中有不同的输入字段,用于搜索一家公司,但它们并非都是必需的Node.js 具有可能为null参数的find()语句,node.js,mongodb,express,mongoose,mongodb-query,Node.js,Mongodb,Express,Mongoose,Mongodb Query,我在想猫鼬和猫鼬是怎么工作的。。。我对他们真的很陌生,我似乎不知道如何基于find语句返回值,其中查询中的某些给定参数可能为null-是否有可以为此或其他设置的属性 为了进一步解释,我有一个网页,其中有不同的输入字段,用于搜索一家公司,但它们并非都是必需的 var Company = mongoose.model('Company'); Company.find({companyName: req.query.companyName, position: req.query.positi
var Company = mongoose.model('Company');
Company.find({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);
});
通过填写网页上的所有输入字段,我得到了一个结果,但只有一个特定的匹配。假设我只填写了
country
,它不返回任何内容,因为其余部分为空,但我希望返回所有行,例如德国。我希望我表达得足够清楚。例如,您需要使用逻辑运算符包装查询
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
对象充当查询,并且具有隐式逻辑和
操作,因为MongoDB在指定逗号分隔的表达式列表时提供隐式操作。当必须在多个表达式中指定同一字段或运算符时,需要使用显式AND with运算符
如果您正在查找同时满足逻辑<代码>和<代码>和<代码>或<代码>的查询,即返回符合这两个子句条件的所有文档,例如给定对<代码>位置<代码>和<代码>国家<代码>或任何其他字段的查询,则您可以将查询调整为:
var Company = mongoose.model('Company');
Company.find(
{
"$or": [
{ "companyName": req.query.companyName },
{
"position": req.query.position,
"country": req.query.country
},
{ "areaOfExpertise": req.query.areaOfExpertise },
{ "zip": req.query.zip }
]
}, function(err, docs) {
res.json(docs);
}
);
但是,这也可能取决于哪些查询参数需要作为必需参数加入,等等。如果查询中的参数为空,我只是简单地删除了这些参数。提交中的所有文本字段似乎都以“”的形式提交(空)。因为数据库中没有这样的值,所以它不会返回任何内容。这么简单,我从没想过 例如:
if (req.query.companyName == "") {
delete req.query.companyName;
}
我会试试看。非常感谢。让我更接近了谢谢,但我必须找到一个不同的解决方案,因为如果我搜索“UI开发者”和“法国”它返回所有国家/地区和法国所有职位的所有UI开发人员。您可能需要调整上述查询,以使某些查询子句满足逻辑上的
和,即返回符合这两个子句条件的所有文档。