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

Encontrar un documento MongoDB a través de una palabra en una descripción de campo en cada producto con Mongoskin

Para encontrar a través de una palabra, todos los productos que existen en la colección incluyen en el campo de descripción esa palabra, necesita una coincidencia de expresiones regulares con distinción de mayúsculas y minúsculas. Podría usar la siguiente consulta (como ejemplo):

db.product.find({"data.description": /test/i});

donde el i en el /test/i indica que no se distingue entre mayúsculas y minúsculas, por lo que la expresión regular coincide con el campo de descripción para cualquier texto con la cadena "test" . La expresión SQL equivalente es la siguiente:

select * from product where description like '%test%'

Entonces podría usar lo mismo en la implementación de su ruta, usando find() método para devolver todos los documentos coincidentes en lugar de findOne() que devuelve solo un documento:

app.get("/description/:id", auth, function(req, res, next) {
    req.collection.find({
        "data.description": /req.params.id/i
    }, function(e, result) {
        if(e) return next(e);
        res.send(result);
    });
});

Otra opción es usar el $text operador en su operación de búsqueda, ya que realiza una búsqueda de texto en el contenido de los campos indexados con un índice de texto. Entonces, lo primero que haría sería crear un índice de texto en el campo de descripción:

db.collection.createIndex( { "data.description": "text" } )

Después de eso, puede consultar usando el operador $ texto. Por ejemplo, la siguiente consulta busca el término café:

db.collection.find( { $text: { $search: "coffee" } } )

EDITAR :

En igualdad de condiciones, puede actualizar la implementación de su ruta para usar cadenas de consulta en la URL en su lugar:

app.get("/description", auth, function(req, res, next) {
    req.collection.find({
        $text: { $search: req.params.q }
    }, function(e, result) {
        if(e) return next(e);
        res.send(result);
    });
});

que puede consultar en su navegador como http://localhost/description?q=product