#javascript #mongodb #mongoose
Вопрос:
Извините за плохо сформулированный вопрос..
Вот код:
module.exports.getUserByQuery = function (params, callback) {
if (params.nationality.length !== 0 amp;amp; 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 amp;amp; params.languages.length === 0) {
User.find(
{
age: {
$gt: params.minAge,
$lt: params.maxAge,
},
},
callback
);
} else if (params.nationality.length !== 0 amp;amp; params.languages.length === 0) {
User.find(
{
age: {
$gt: params.minAge,
$lt: params.maxAge,
},
nationality: { $in: params.nationality },
},
callback
);
} else if (params.nationality.length === 0 amp;amp; params.languages.length !== 0) {
User.find(
{
age: {
$gt: params.minAge,
$lt: params.maxAge,
},
languages: { $in: params.languages },
},
callback
);
}
};
Параметры.национальность и язык могут быть пустым строковым массивом, если пользователь веб-сайта не выбрал значение в поисковой системе.
Есть ли значение, которое я мог бы установить для них, чтобы фильтр действовал так, как если бы его не существовало?
Я в основном ищу способ избавиться от «если».
Ответ №1:
Я не думаю, что вы можете полностью устранить эти условия, но вы можете структурировать свой код так, чтобы он был более управляемым (например):
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 amp;amp; 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);