Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 具有可能为null参数的find()语句_Node.js_Mongodb_Express_Mongoose_Mongodb Query - Fatal编程技术网

Node.js 具有可能为null参数的find()语句

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

我在想猫鼬和猫鼬是怎么工作的。。。我对他们真的很陌生,我似乎不知道如何基于find语句返回值,其中查询中的某些给定参数可能为null-是否有可以为此或其他设置的属性

为了进一步解释,我有一个网页,其中有不同的输入字段,用于搜索一家公司,但它们并非都是必需的

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开发人员。您可能需要调整上述查询,以使某些查询子句满足逻辑上的
,即返回符合这两个子句条件的所有文档。