2. Bases de datos NoSQL

2.10. Buscar en un array de documentos

Si nos fijamos en la estructura del fichero JSON importado, solo contiene un documento JSON. Y en uno de los campos, el llamado knownGene contiene un array de documentos JSON, y cada documento del array contiene información de los genes del cromosoma 1: nombre, hebra, cromosoma, etc.

Esto nos obliga a conocer cómo se trabaja con los contenidos de los arrays si queremos gestionar correctamente esta información.

Tenemos que usar el dot.notation.

Por ejemplo, vamos a mostrar la información del gen uc009vis.3.

Esta es la instrucción:

db.chr1.find({ "knownGene.name": "uc009vis.3"}, {"knownGene.$": 1}).pretty();

> db.chr1.find(
… { "knownGene.name": "uc009vis.3"}, {"knownGene.$": 1}
… ).pretty();
{
        "_id" : ObjectId("6487db999faf672901337f0a"),
        "knownGene" : [
                 {
                        "name" : "uc009vis.3",
                        "chrom" : "chr1",
                        "strand" : "-",
                        "txStart" : 14361,
                        "txEnd" : 16765,
                        "cdsStart" : 14361,
                        "cdsEnd" : 14361,
                        "exonCount" : 4,
                        "exonStarts" : "14361,14969,15795,16606,",
                        "exonEnds" : "14829,15038,15942,16765,",
                        "proteinID" : "",
                        "alignID" : "uc009vis.3"
                 }
        ]
}
>

Vemos como, para referirnos al nombre del gen, escribimos "knownGene.name": o sea, el nombre del campo del documento que es un array de documentos JSON, el knownGene, punto y a continuación el nombre del campo de los documentos que se encuentran en el array name. Con knownGene.$": 1 indicamos que nos muestre todos los campos de los documentos encontrados en el array knownGene.

El dot.notation también nos sirve para referirnos a campos de documentos embebidos.