MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Recherche floue avec Mongodb ?

Je crois que pour faire une recherche "floue", vous devrez utiliser regex. Cela devrait accomplir ce que vous recherchez (source de la fonction escapeRegex ici):

function escapeRegex(text) {
    return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
};

router.get("/", function(req, res) {
    if (req.query.search) {
       const regex = new RegExp(escapeRegex(req.query.search), 'gi');
       Jobs.find({ "name": regex }, function(err, foundjobs) {
           if(err) {
               console.log(err);
           } else {
              res.render("jobs/index", { jobs: foundjobs });
           }
       }); 
    }
}

Cela étant dit, votre application peut rencontrer des problèmes de performances lors de l'interrogation de mongo par regex. L'utilisation d'une bibliothèque telle que search-index pour la recherche peut aider à optimiser les performances de votre application, avec l'avantage supplémentaire de rechercher des radicaux de mots (comme renvoyer "found" à partir de "find").

MISE À JOUR :Ma réponse initiale incluait une simple expression régulière qui rendrait votre application vulnérable à une attaque DDoS regex. J'ai mis à jour avec une expression régulière échappée "sûre".