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

Ricerca fuzzy con Mongodb?

Credo che per eseguire ricerche "fuzzy" dovrai usare regex. Questo dovrebbe realizzare ciò che stai cercando (fonte della funzione escapeRegex qui):

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

Detto questo, la tua applicazione può riscontrare problemi di prestazioni durante l'esecuzione di query su mongo tramite regex. L'utilizzo di una libreria come search-index per la ricerca potrebbe aiutare a ottimizzare le prestazioni della tua applicazione, con l'ulteriore vantaggio di cercare radici di parole (come restituire "trovato" da "trova").

AGGIORNAMENTO:la mia risposta originale includeva una semplice espressione regolare che avrebbe lasciato la tua applicazione vulnerabile a un attacco DDoS regex. Ho aggiornato con una espressione regolare con escape "sicuro".