Cuando accedemos a los datos de los campos de un documento en MongoDB podemos encontrarnos la necesidad de realizar consultas MongoDB like. Es decir, realizar consultas por cadenas similares de texto. Por ejemplo, nombres que empiecen por una letra o letras, palabras que contengan una cierta cadena de caracteres,…
Las consultas MongoDB like se resuelven mediante expresiones regulares. Lo que realizaremos mediante la siguinte sintaxis:
db.coleccion.find({campo:expresión_regular});
Para los patrones de las expresiones regulares MongoDB utiliza “Perl Compatible Regular Expressions” (PCRE). De esta forma tendremos las siguientes similitudes con los patrones LIKE.
cadena% | /^cadena/ |
%cadena% | /cadena/ |
%cadena | /cadena$/ |
De esta forma la sentencia para realizar consultas MongoDB like será la siguiente:
cursor = db.ciudades.find({ciudad:/^M/});
En este caso hemos realizado un filtro LIKE de ciudades que empiecen por M.
A la hora de utilizar las expresiones regulares, los índices solo se utilizarán de forma eficiente cuando utilizemos la forma /^cadena/
Otros podrían ser ciudades que contengan una «r»:
cursor = db.ciudades.find({ciudad:/r/});
O ciudades que acaben en d:
cursor = db.ciudades.find({ciudad:/d$/});
Ya solo nos quedará recorrer con un cursor el resultado para volcar los documentos devueltos por la expresión regular:
while (cursor.hasNext()) {
printjson(cursor.next());
}
De esta forma vemos que es sencillo realizar consultas MongoDB Like.