2.6. Buscar documentos
Primero contaremos cuántos documentos tiene la colección chr1 con la instrucción
db.chr1.find().count();
Esta instrucción contiene dos funciones. La función find()
que es la función que utilizamos para realizar búsquedas en la colección de documentos. Sería la instrucción SELECT
que hemos visto en MySQL. Si no añadimos parámetros nos mostrará todos los documentos de la colección, si añadimos parámetros, estos serán los criterios de búsqueda o los filtros de la selección. En este caso complementamos la función find()
con la función count()
para contar los documentos encontrados. La función count()
no requiere parámetros, pero es necesario escribir los paréntesis igualmente.
Al ejecutar la instrucción db.chr1.find().count();
el sistema nos devuelve 3. La colección chr1 tiene 3 documentos.
Vamos a utilizar la instrucción db.chr1.find(); para ver todos los documentos:
Para cada documento, el sistema nos muestra el campo _id con un valor generado aleatoriamente por la función del sistema ObjectId()
;
En el campo _id se guarda la clave primaria del documento. Esta clave primaria es tan importante para el sistema que si el documento que insertamos no tiene el campo _id el sistema lo crea de forma automática. En nuestros ejemplos los tres documentos inseridos no tienen el campo _id y el sistema lo ha generado automáticamente.
En un documento puede haber muchos campos y, tal como los muestra la función find();
, quedan poco legibles. Para que el documento se pueda leer mejor, la función find();
se puede complementar con la función pretty();
db.chr1.find().pretty();
Como podemos observar, la función pretty(); nos permite ver los valores de cada campo de cada documento de una forma mucho más amigable.
ahora algunos ejemplos de utilización de la función find() con algunos parámetros para filtrar los resultados.
Vamos a mostrar solo los genes de nuestra colección que se encuentra en la hebra +:
db.chr1.find({"strand": "+"}).pretty();
El parámetro de la función es la condición de selección de la búsqueda {"strand": "+"}
Si no queremos mostrar algún campo, como por ejemplo el campo _id
, escribimos
db.chr1.find({"strand": "+"}, {"_id":0}).pretty();
Si queremos mostrar un solo campo de los documentos seleccionados, como por ejemplo el campo name, escribimos
db.chr1.find({"strand": "+"},{"name":1, "_id":0 }).pretty();
Las consultas con la función find()
pueden ser mucho más elaboradas, usando varios campos como condición de búsqueda, o también usando operadores especiales como mayor que, menor que, etc.
Ejemplos de operadores especiales:
$gt, $gte, $lt, $lte, $ne, $in, $nin, $mod, $regex/$options,
$all, $size, $exists, $type, $not, $or, $nor, $elemMatch
Ejemplo de selección de documentos en los que el campo txStart sea mayor que 11873:
db.chr1.find({"txStart": {"$gt" : 11873 }}).pretty();
O que cumpla dos condiciones, que se encuentren en la hebra + y que el campo txStart sea mayor o igual a 11873.
db.chr1.find({"strand": "+", "txStart": {"$gte" : 11873 }}).pretty();