sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Búsqueda difusa con Mongodb?

Creo que para hacer una búsqueda "difusa" necesitará usar expresiones regulares. Esto debería lograr lo que está buscando (fuente de la función escapeRegex aquí):

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

Dicho esto, su aplicación puede experimentar problemas de rendimiento al consultar mongo por expresiones regulares. El uso de una biblioteca como search-index para la búsqueda podría ayudar a optimizar el rendimiento de su aplicación, con el beneficio adicional de buscar raíces de palabras (como devolver "encontrado" de "encontrar").

ACTUALIZACIÓN:Mi respuesta original incluía una expresión regular simple que dejaría su aplicación vulnerable a un ataque DDoS de expresiones regulares. Actualicé con una expresión regular escapada "segura".