Overview
Esta página describe un modelo de datos que describe una estructura tipo árbol en los documentos MongoDB almacenando referencias en los nodos principales a los nodos secundarios.
Patrón
El patrón Referencias secundarias almacena cada nodo de árbol en un documento; además del nodo de árbol, el documento almacena en una matriz los identificadores de los hijos del nodo.
Considere la siguiente jerarquía de categorías:
El siguiente ejemplo modela el árbol utilizando referencias secundarias, almacenando la referencia a los hijos del nodo en el campo children:
db.categories.insertMany( [ { _id: "MongoDB", children: [] }, { _id: "dbm", children: [] }, { _id: "Databases", children: [ "MongoDB", "dbm" ] }, { _id: "Languages", children: [] }, { _id: "Programming", children: [ "Databases", "Languages" ] }, { _id: "Books", children: [ "Programming" ] } ] )
La consulta para recuperar los hijos inmediatos de un nodo es rápida y sencilla:
db.categories.findOne( { _id: "Databases" } ).children Puede crear un índice en el campo
childrenpara permitir una búsqueda rápida por parte de los nodos secundarios:db.categories.createIndex( { children: 1 } ) Puede consultar un nodo en el campo
childrenpara encontrar su nodo padre así como sus hermanos:db.categories.find( { children: "MongoDB" } )
El patrón Referencias de Hijos ofrece una solución adecuada para el almacenamiento de árboles, siempre que no se requieran operaciones en subárboles. Este patrón también puede ser una solución adecuada para almacenar grafos donde un nodo puede tener varios padres.