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
});