sql >> Database teknologi >  >> NoSQL >> MongoDB

Fuzzy søgning med Mongodb?

Jeg tror, ​​at for at udføre "fuzzy" søgning, skal du bruge regex. Dette skulle opnå det, du leder efter (escapeRegex funktionskilde her):

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

Når det er sagt, kan din applikation opleve ydeevneproblemer, når du forespørger mongo af regex. Brug af et bibliotek som søgeindeks til søgning kan hjælpe med at optimere din applikations ydeevne med den ekstra fordel ved at søge efter ordstammer (som at returnere "fundet" fra "find").

OPDATERING:Mit originale svar inkluderede et simpelt regulært udtryk, der ville gøre din applikation sårbar over for et regex DDoS-angreb. Jeg har opdateret med et "sikkert" escaped regex.



  1. Håndtering af skemaændringer i Mongoose

  2. HDFS Disk Balancer Introduktion, betjening og funktioner

  3. Hvordan eksporterer/dumper jeg mongodb-databasen?

  4. MongoDB Aggregation:Hvordan får man det samlede antal poster?