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.