Javascript 忽略在Mongoose';的查询对象参数中传递的未定义值;s查找函数?

Javascript 忽略在Mongoose';的查询对象参数中传递的未定义值;s查找函数?,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,因此: 假设只有req.query.what具有实际值,例如“yes”,而其余(req.query.where、req.query.date等)都未定义/为空。如果我保持此代码不变,它将查找具有what=req.query.what和where=req.query.where等的文档,但我只希望它查找具有what=to req.query.what的文档,因为其他字段未定义/为空。您必须首先从未定义/为空的值中筛选res.query对象,然后将其传递给find函数。如果只有几个属性,则可以使用I

因此:


假设只有req.query.what具有实际值,例如“yes”,而其余(req.query.where、req.query.date等)都未定义/为空。如果我保持此代码不变,它将查找具有what=req.query.what和where=req.query.where等的文档,但我只希望它查找具有what=to req.query.what的文档,因为其他字段未定义/为空。

您必须首先从未定义/为空的值中筛选
res.query
对象,然后将其传递给
find
函数。如果只有几个属性,则可以使用
If
语句:

Sound.find({
  what: req.query.what,
  where: req.query.where,
  date: req.query.date,
  hour: req.query.hour}, function(err, varToStoreResult, count) {
  //stuff
});
或者,如果有很多属性,您可以对它们进行迭代:

const query = req.query;
const conditions = {};

if (query.what) {
  conditions.what = query.what;
}

if (query.where) {
  conditions.where = query.where;
}

....


Sound.find(conditions, function () {});

另外,我不建议从实际的
res.query
对象中删除属性-
delete res.query.what
,因为如果您愿意,您将无法在另一个中间件中使用它。

您可以对
对象使用简单的reduce.entries

const req={query:{a:1,b:undefined,c:2}
const query=Object.entries(请求查询).reduce((a[k,v])=>{
如果(v!==未定义){
a[k]=v;
}
归还
}, {});

console.log(查询)
我希望我能很好地理解你 这里,这是我个人用于此类查询或某种过滤的方法:

const query = req.query;
const conditions = Object.keys(query)
  .reduce((result, key) => {
    if (query[key]) {
      result[key] = query[key];
    }
    return result;
}, {}); 

Sound.find(conditions, function () {});
希望这对你们有帮助

var query = {}; /*this is our object*/

if(req.query.sell) {  /* if request is valid and not null/undefined/empty*/

var sell = req.query.sell; /*we past the query with in a variable as a value*/

var Som = "firstname"; /*after that we define our mongodb parametre as a name */

 query[Somesort] = Som; /*and here we past our name and value of parameter to object*/

}
/*and we do this*/
   collection-name-here.find(query, function(err, model-name-here){
        if(err){
            console.log(err);
        } else {
        /*your code
    });