MONGODB:根据一个查询查找所有姓氏或名字

时间:2020-04-08 11:28:00

标签: node.js database mongodb express server

我想根据名字和姓氏查找数据库中所有出现的事件(邀请用户在搜索栏中输入他想要的内容),并且我应该返回所有具有匹配的名字或姓氏的人该查询。

我已经有一个解决方案,但我认为会有更好的解决方案。 这是我的:

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 :(得分:0)

始终使用此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});
    });

答案 1 :(得分:0)

为简单起见,您可以做

    maladeModel.find({
      $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})) 

这将为您提供数据库中所有匹配的文档,但是我认为indexing是最快的。您可以检查