#node.js #mongodb
#node.js #mongodb
Вопрос:
Я пытаюсь получить данные условно на основе переданного параметра.
Параметрами являются ‘room’ и ‘area’
если номер не равен ‘any’, я хочу добавить условие в фильтр для номера.
если область не равна ‘all’, я хочу добавить условие в фильтр для области.
exports.get_property_search = function (req, res) {
var filter = [];
if (req.params.area != "all")
filter.push({ "area": req.params.area });
if (req.params.room != "any")
filter.push({ "roomQty": req.params.room });
AddProperty.find({
$expr:
{
$cond:
{
if: filter != [],
then: {
$and: filter
},
else: {
}
}
}
}, function (err, addProperty) {
if (err)
res.send({ code: '500', message: err });
res.send({ code: '200', data: addProperty });
});
};
Но это условие не работает, и все возвращает все данные без какого-либо фильтра.
Ответ №1:
Вы используете здесь неправильный синтаксис. И это может быть сделано с помощью простого кода javascript вместо использования оператора агрегации.
let filter = {}
if (req.params.area !== "all") {
filter.area = req.params.area
}
if (req.params.room !== "any") {
filter.roomQty = req.params.room
}
AddProperty.find(filter).then((data) => {
console.log(data)
})
Комментарии:
1. Спасибо за ваш ответ. но я хочу оба условия добавить в фильтр. то, что вы только что сделали, заменит roomQty фильтром area. Я хочу, чтобы операция and выполнялась, если оба условия удовлетворяют