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
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"
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"