Overview
Esta página describe un modelo de datos que describe una estructura tipo árbol en documentos MongoDB usando referencias a nodos padres y una matriz que almacena todos los ancestros.
Patrón
El patrón Matriz de Ancestros almacena cada nodo de árbol en un documento; además del nodo de árbol, el documento almacena en una matriz los identificadores de los ancestros o la ruta del nodo.
Considere la siguiente jerarquía de categorías:
El siguiente ejemplo modela el árbol utilizando una matriz de ancestros. Además de... ancestors campo, estos documentos también almacenan la referencia a la categoría padre inmediata en el campo parent:
db.categories.insertMany( [ { _id: "MongoDB", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" }, { _id: "dbm", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" }, { _id: "Databases", ancestors: [ "Books", "Programming" ], parent: "Programming" }, { _id: "Languages", ancestors: [ "Books", "Programming" ], parent: "Programming" }, { _id: "Programming", ancestors: [ "Books" ], parent: "Books" }, { _id: "Books", ancestors: [ ], parent: null } ] )
La consulta para recuperar los ancestros o la ruta de un nodo es rápida y sencilla:
db.categories.findOne( { _id: "MongoDB" } ).ancestors Puede crear un índice en el campo
ancestorspara permitir una búsqueda rápida por parte de los nodos ancestrales:db.categories.createIndex( { ancestors: 1 } ) Puedes consultar por el campo
ancestorspara encontrar todos sus descendientes:db.categories.find( { ancestors: "Programming" } )
El patrón "Arreglo de Ancestros" ofrece una solución rápida y eficiente para encontrar los descendientes y ancestros de un nodo mediante la creación de un índice en los elementos del campo "ancestros". Esto lo convierte en una excelente opción para trabajar con subárboles.
El patrón Matriz de Ancestros es ligeramente más lento que el patrón Caminos Materializados, pero es más sencillo de usar.