MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Pesquisa difusa com o Mongodb?


Acredito que para fazer uma pesquisa "difusa" você precisará usar regex. Isso deve realizar o que você está procurando (fonte da função escapeRegex aqui):
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 });
           }
       }); 
    }
}

Dito isto, seu aplicativo pode ter problemas de desempenho ao consultar o mongo por regex. Usar uma biblioteca como search-index para pesquisa pode ajudar a otimizar o desempenho do seu aplicativo, com o benefício adicional de pesquisar raízes de palavras (como retornar "encontrado" de "localizar").

ATUALIZAÇÃO:Minha resposta original incluiu uma expressão regular simples que deixaria seu aplicativo vulnerável a um ataque regex DDoS. Eu atualizei com um regex com escape "seguro".