Skip to content

Latest commit

 

History

History
58 lines (38 loc) · 2.68 KB

modelo-de-estructuras-de-arbol-con-rutas-materializadas.md

File metadata and controls

58 lines (38 loc) · 2.68 KB

Modelo de estructuras de árbol con rutas materializadas

Descripción general

Esta página describe un modelo de datos que describe una estructura en forma de árbol en los documentos de MongoDB almacenando rutas de relación completas entre documentos.

Patrón

El patrón de rutas materializadas almacena cada nodo del árbol en un documento; Además del nodo del árbol, el documento almacena como una cadena la (s) identificación (es) de los antepasados ​​o la ruta del nodo. Aunque el patrón de rutas materializadas requiere pasos adicionales para trabajar con cadenas y expresiones regulares, el patrón también proporciona más flexibilidad para trabajar con la ruta, como buscar nodos por rutas parciales.

Considere la siguiente jerarquía de categorías:

El siguiente ejemplo modela el árbol usando rutas materializadas , almacenando la ruta en el campo path; la cadena de ruta usa la coma ,como delimitador:

db.categories.insertMany( [
   { _id: "Books", path: null },
   { _id: "Programming", path: ",Books," },
   { _id: "Databases", path: ",Books,Programming," },
   { _id: "Languages", path: ",Books,Programming," },
   { _id: "MongoDB", path: ",Books,Programming,Databases," },
   { _id: "dbm", path: ",Books,Programming,Databases," }
] )
  • Puede consultar para recuperar el árbol completo, ordenando por campo path:

    db.categories.find().sort( { path: 1 } )
    
  • Puede usar expresiones regulares en el pathcampo para encontrar los descendientes de Programming:

    db.categories.find( { path: /,Programming,/ } )
    
  • También puede recuperar los descendientes de Booksdonde Bookstambién se encuentra en el nivel más alto de la jerarquía:

    db.categories.find( { path: /^,Books,/ } )
    
  • Para crear un índice en el campo, pathuse la siguiente invocación:

    db.categories.createIndex( { path: 1 } )
    

    Este índice puede mejorar el rendimiento según la consulta:

    • Para consultas del subárbol raíz Books(por ejemplo, /^,Books,/ o /^,Books,Programming,/), un índice en el pathcampo mejora significativamente el rendimiento de la consulta.

    • Para consultas de subárboles donde la ruta desde la raíz no se proporciona en la consulta (por ejemplo /,Databases,/), o consultas similares de subárboles, donde el nodo puede estar en el medio de la cadena indexada, la consulta debe inspeccionar el índice completo .

      Para estas consultas, un índice puede proporcionar alguna mejora en el rendimiento si el índice es significativamente más pequeño que la colección completa.