2. Bases de datos NoSQL

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.

Figura 79. Contar todos los documentos de una colección.
Fuente: elaboración propia.

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:

Figura 80. Mostrar la información de todos los documentos de una colección.
Fuente: elaboración propia.

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();
Figura 81. Mostrar la información de todos los documentos de una colección con un formato más legible.
Fuente: elaboración propia.

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();
Figura 82. Mostrar la información de los genes de la hebra +.
Fuente: elaboración propia.

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();

Figura 83. Mostrar la información de los genes de la hebra + sin el campo _id.
Fuente: elaboración propia.

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();
Figura 84. Mostrar los genes de la hebra + sin mostrar el campo _id y mostrar el campo name.
Fuente: elaboración propia.

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.