Условное применение и условие в MongoDB

#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 выполнялась, если оба условия удовлетворяют