【问题标题】:MONGODB: find all occurencies of first or lastname according to one queryMONGODB:根据一个查询查找所有出现的名字或姓氏
【发布时间】:2020-07-20 19:11:47
【问题描述】:

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

我已经有了解决方案,但我觉得会有更好的解决方案。 这是我的:

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});
        }
    );

【问题讨论】:

    标签: node.js database mongodb express server


    【解决方案1】:

    使用这个 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});
        });
    

    【讨论】:

    • 这行得通,但它要求查询与数据库中的查询完全匹配,但我需要类似:我的数据库中有'Raiah',当我输入“rai”时,我会得到“赖亚”作为回应。我添加了 $in 聚合,但它不起作用
    • 别担心,看看我们如何才能总体匹配正则表达式。会解决你的问题
    【解决方案2】:

    为简单起见,您可以这样做

        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 是最快的。你可以检查一下

    【讨论】:

    • $match 被用作聚合,所以我们应该在聚合方法中使用它,它给了我一个错误。
    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    相关资源
    最近更新 更多