Overview
Esta página describe un modelo de datos que describe una estructura similar a un árbol en documentos de MongoDB usando referencias a nodos padres y una matriz que almacena todos los ancestros.
Patrón
El patrón arreglo of Ancestors almacena cada nodo del árbol en un documento; además del nodo del árbol, el documento almacena en un arreglo la(s) ID de los antecesores o la ruta del nodo.
Considera la siguiente jerarquía de categorías:
El siguiente ejemplo modela el árbol usando un arreglo de Antepasados. Además de lo ancestors campo, estos documentos también almacenan la referencia a la categoría principal 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 Puedes crear un índice en el campo
ancestorspara permitir una búsqueda rápida a través de los nodos ancestros:db.categories.createIndex( { ancestors: 1 } ) Puede realizar una query por el campo
ancestorspara encontrar a todos sus descendientes:db.categories.find( { ancestors: "Programming" } )
El patrón arreglo de Ancestros proporciona una solución rápida y eficiente para encontrar los descendientes y los ancestros de un nodo mediante la creación de un índice en los elementos del campo de ancestros. Esto hace que arreglo de Ancestros sea una buena opción para trabajar con subárboles.
El patrón arreglo de Antepasados es un poco más lento que el patrón Caminos Materializados, pero es más sencillo de usar.