Как сделать поисковый запрос в MongoDB - PullRequest
1 голос
/ 08 ноября 2019

У меня есть профили в коллекции под названием Профили. Я делаю запрос для поиска профилей на основе предоставленных пользователем полей. Форма поиска (форма пользовательского интерфейса), у пользователя есть различные варианты для поиска профилей, таких как «женский» или «мужской» или «любой», и нажмите кнопку «Поиск». Таким образом, пользователь может искать в моей коллекции профилей, предоставляя комбинацию следующих полей:

  • Пол
  • Страна
  • Город
  • Семейное положение
  • Образование
  • Религия

Так, например, пользователь выбирает поля следующим образом: Пол: «Женский», Страна: «Пакистан», Город: «Исламабад», Семейное положениеСтатус: «Любой», Образование: «Любой», Религия: «Ислам», тогда какой будет запрос для MongoDB?

Мне нужен динамический запрос для всех случаев, пожалуйста.

Я пытался до сих пор:

Profile.find(
    {
        gender: req.body.gender,
        country: req.body.country,
        city: req.body.city,
        maritalStatus: req.body.maritalStatus,
        education: req.body.education,
        religion: req.body.religion
    },
    {},
    function(err, profiles){
        if(profiles!=null)
            { res.status(200).json({status: true, message:'Profile(s) found', profiles})}
        else
            {res.status(404).json({status: false, message:'No profile(s) found.'})}
    }
);

, но приведенный выше запрос не является динамическим для всех случаев.

1 Ответ

0 голосов
/ 08 ноября 2019

Просто извлеките поля, присутствующие в объекте req.body, и добавьте их в объект. Этот объект будет использоваться для фильтрации результатов запроса

const filter = Object.entries(req.body)
                     .reduce((acc, curr) => (acc[curr[0]] = curr[1], acc), {});

. В конце у вас будет объект filter, который будет содержать только те свойства, которые выбрал пользователь. Вы можете передать этот объект фильтра в свой запрос

Profile.find(filter, {}, function(err, profiles) {
    if(profiles!=null)
          return res.status(200).json({status: true, message:'Profile(s) found', profiles});

    res.status(404).json({status: false, message:'No profile(s) found.'});
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...