Esta página describe un modelo de datos que describe una estructura en forma de árbol en los documentos de MongoDB utilizando referencias a los nodos principales y una matriz que almacena todos los antepasados.
El patrón Array of Ancestors almacena cada nodo del árbol en un documento; Además del nodo del árbol, el documento almacena en una matriz la (s) identificación (es) de los antepasados o la ruta del nodo.
Considere la siguiente jerarquía de categorías:
El siguiente ejemplo modela el árbol usando Array of Ancestors . Además del ancestors
campo, estos documentos también almacenan la referencia a la categoría principal inmediata en el parent
campo:
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
ancestors
para permitir una búsqueda rápida por los nodos ancestros:db.categories.createIndex( { ancestors: 1 } )
-
Puede consultar por campo
ancestors
para encontrar todos sus descendientes:db.categories.find( { ancestors: "Programming" } )
El patrón Array of Ancestors proporciona una solución rápida y eficiente para encontrar los descendientes y los antepasados de un nodo mediante la creación de un índice sobre los elementos del campo de antepasados. Esto hace que Array of Ancestors sea una buena opción para trabajar con subárboles.
El patrón Array of Ancestors es un poco más lento que el patrón Materialized Paths , pero es más sencillo de usar.