MONGODB: найти все вхождения имени или фамилии по одному запросу - PullRequest
0 голосов
/ 08 апреля 2020

Я хочу найти все вхождения в моей БД в соответствии с именем и фамилией (пользователю предлагается ввести то, что он хочет в строке поиска), и я должен вернуть всех людей, чьи имя или фамилия совпадают этот запрос.

У меня уже есть решение, но я чувствую, что будет лучшее. Вот мой:

maladeModel.find ({},{nom: 1, prenom: 1, dateNaissance :1, adresse :1, photoIdentite :1},(err, malades) => {
        if (err) {
            res.status(500).json ({
                type: "Err" ,
                message : "Server not responding"
            });
        }
        return malades;
    }).then (malades=> 
       {
            malades = malades.filter(malade=> {
               return malade.nom.toUpperCase().includes(req.body.key.toUpperCase())
               ||
                malade.prenom.toUpperCase().includes(req.body.key.toUpperCase())
            });
           res.status(200).json ({type :"Info",  message: "Le malade est trouve" , malades});
        }
    );

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

для простоты вы можете просто сделать

    maladeModel.find({$match:{
      $or:[
      {nom: req.body.key.toLowerCase()},
      {prenom: req.body.key.toLowerCase()}
     ]
     }, {dateNaissance :1, adresse :1, photoIdentite :1}).then(malades =>{
     res.status(200).json({type :"Info",  message: "Le malade est trouve" , malades});
    }).catch(err => res.status(500).json({message: err.message})) 

, и вы получите все соответствующие документы в вашей базе данных, но я думаю, индексация - самая быстрая. Вы можете проверить это

0 голосов
/ 08 апреля 2020

используйте этот встроенный встроенный фильтр mongodb всегда оптимально.

 maladeModel.aggregate([
    {
           $project:{
               nom: { $toLower: "$nom" },
               prenom: { $toLower: "$prenom" },
               dateNaissance :1, adresse :1, photoIdentite :1
             }

    },
     {
       $match:{
             $or:[
                   {nom: req.body.key.toLowerCase()},
                   {prenom: req.body.key.toLowerCase()}
                 ]
             }
    }

    ]).exec(function(err, malades) {
    res.status(200).json ({type :"Info",  message: "Le malade est trouve" , malades});
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...