sql >> Databasteknik >  >> NoSQL >> MongoDB

Luddrig sökning med Mongodb?

Jag tror att för att göra "fuzzy" sökningar måste du använda regex. Detta bör åstadkomma det du letar efter (escapeRegex funktionskälla här):

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

Med det sagt kan din applikation uppleva prestandaproblem när du frågar mongo med regex. Att använda ett bibliotek som sökindex för sökning kan hjälpa till att optimera din applikations prestanda, med den extra fördelen att söka efter ordstammar (som att returnera "hittad" från "hitta").

UPPDATERING:Mitt ursprungliga svar inkluderade ett enkelt vanligt uttryck som skulle göra din applikation sårbar för en regex DDoS-attack. Jag har uppdaterat med ett "säkert" escaped regex.



  1. MongoDB $tak

  2. $unset på flera fält i mongodb

  3. MongoDb:Skillnad mellan $push/$addtoset

  4. MongoDB och PostgreSQL tankar