gpt4 book ai didi

javascript - 忽略在 Mongoose 的 Find 函数的查询对象参数中传递的未定义值?

转载 作者:行者123 更新时间:2023-11-30 20:04:12 24 4
gpt4 key购买 nike

所以:

Sound.find({
what: req.query.what,
where: req.query.where,
date: req.query.date,
hour: req.query.hour}, function(err, varToStoreResult, count) {
//stuff
});

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

最佳答案

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

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

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

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

....


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

或者如果有很多属性你可以遍历它们:

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

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

关于javascript - 忽略在 Mongoose 的 Find 函数的查询对象参数中传递的未定义值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53091433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com