Mongoose Find函数,有没有一个$的值无论如何都是真的?
很抱歉提出的问题表述不当。
代码如下:
module.exports.getUserByQuery = function (params, callback) {
if (params.nationality.length !== 0 && params.languages.length !== 0) {
User.find(
{
age: {
$gt: params.minAge,
$lt: params.maxAge,
},
nationality: { $in: paramas.nationality},
languages: { $in: params.languages },
},
callback
);
} else if (params.nationality.length === 0 && params.languages.length === 0) {
User.find(
{
age: {
$gt: params.minAge,
$lt: params.maxAge,
},
},
callback
);
} else if (params.nationality.length !== 0 && params.languages.length === 0) {
User.find(
{
age: {
$gt: params.minAge,
$lt: params.maxAge,
},
nationality: { $in: params.nationality },
},
callback
);
} else if (params.nationality.length === 0 && params.languages.length !== 0) {
User.find(
{
age: {
$gt: params.minAge,
$lt: params.maxAge,
},
languages: { $in: params.languages },
},
callback
);
}
};
如果网站用户没有在搜索引擎中选择值,Params.National和Language可以是空字符串数组。
我是否可以为它们设置一个值,使过滤表现得就像它不存在一样?
我基本上是在寻找一种方法来消除IF。
解决方案
我认为您无法完全消除这些条件,但您可以将代码构建为更易于管理(例如):
let params = { minAge: 10, maxAge: 12, nationality: [ ], languages: [ ] }
const filterBuilder = function(params) {
const f1 = {
age: {
$gt: params.minAge,
$lt: params.maxAge
}
}
const f2 = { nationality: { $in: params.nationality } }
const f3 = { languages: { $in: params.languages } }
if (params.languages.length !== 0 && params.nationality.length !== 0) {
Object.assign(f1, f2, f3);
} else if (params.languages.length !== 0) {
Object.assign(f1, f3);
} else if (params.nationality.length !== 0) {
Object.assign(f1, f2);
}
return f1;
}
User.find(filterBuilder(params), callback);
相关文章