Mongo DB

Operadores

Hablando de puntaje, que pasaría si se quiere los puntajes mayores a determinado número? bueno, esto es posible con la función $gt y se usa de la siguiente manera tomando en cuenta el ejercicio anterior:

db.scores.find( { score : { $gt : 95 } } )
//Esto retornará todos los documentos que tengan puntajes mayores que 95

Cuando se quiera un valor mayor o igual que determinado numero se usa el comando gte y se usa de la misma manera que el ejemplo anterior:

db.scores.find( { score : { $gte : 95 } } )
//Esto retornará todos los documentos que tengan puntajes mayores O IGUALES a 95

Obviamente también están los comandos menor y menor o igual a determinado valor, y son lt y lte respectivamente, se usan de la siguiente manera:

db.scores.find( { score : { $lt : 95 } } )
//Esto retornará todos los documentos que tengan puntajes menores a 95

db.scores.find( { score : { $lte : 95 } } )
//Esto retornará todos los documentos que tengan puntajes menores O IGUALES a 95

db.scores.find( { score : { $gte : 90, $lt : 95} } )
//Esto retornará todos los documentos que tengan puntajes entre 90 y 95 (incluyendo el número 90 y excluyendo el número 95)

Éstas funciones también aplican para letras, por ejemplo si se quieren los nombres de personas que empiecen por a, b y c es posible escribiendo el comando:

db.people.find( { name : { $lte : "C" } } )
//Esto retornará todas las personas el cual su nombre comience por a, b y c

Filtros

Una de las maneras más importantes para filtrar información son con los comandos $regex, $exist y $type.

Si tuvieramos una colección donde no todos los registros tengan determinado campo, como por ejemplo, tenemos la colección "personas" y no todos tienen ingresado el campo "telefono", podríamos filtrar la información de dos maneras, traer los datos que NO tengan "telefono", o traer los que SI tengan, ambas opciones se harían de la siguiente manera:

db.people.find( { "telefono" : { $exist : true } } )
//esto retornará todos las personas que tengan "telefono"

db.people.find( { "telefono" : { $exist : false } } )
//esto retornará todos las personas que NO tengan "telefono"

Suponiendo que tenemos un campo que puede ser tanto como numérico, como tipo string, podemos filtrar la información con el comando $type y se usa de la misma manera que el anterior filtro, con la diferencia de que en vez de poner valores true o false se pone el tipo de la variable que se requiere.

Por ultimo $regex nos ayuda a filtrar información que termine o contenga algún caracter en especifico, por ejemplo:

db.people.find( { name : { $regex : "e$" } } )
//retornara todas las personas que tengan un nombre que termine con la letra "e"

db.people.find( { name : { $regex : "e" } } )
//retornara todas las personas que tengan un nombre que contenga la letra "e"

"or" y "and"

Se usa el comando or cuando se quiera filtrar por una u otra razón, pero que solo es necesario que se cumpla una de las razones para que se imprima ese resultado, por ejemplo:

db.people.find( { $or : [ { name : { $regex : "e$" } }, { telefono : $exist : true } } ] } )
//Esto mostrara las personas que tengan un nombre que termine en "e" o las personas que tengan telefono

El comando $and se usa cuando se quieren que ambas condiciones se aplican, pero en mi opinión, este comando no es necesario ya que al filtrar manualmente vaarias condiciones y si no se pone el comando $or todas las condiciones deben aplicar, en todo caso, aquí hay un ejemplo:

db.people.find( { $and : [ { name : { $regex : "a$" } }, { name : $gt : "C" } } ] } )
//Esto mostrara las personas que tengan un nombre que termine en "a" y empiecen por las letras "a", "b" o "c"

db.people.find( { name : { $regex : "a$", $gt : "C" } } ] } )
//Esto mostrara las personas que tengan un nombre que termine en "a" y empiecen por las letras "a", "b" o "c"