Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Estruturas de árvore modelo com caminhos materializados

Nesta página

  • Visão geral
  • Padrão

Esta página descreve um modelo de dados que descreve uma estrutura semelhante à árvore em documentos MongoDB armazenando caminhos completos de relacionamento entre documentos.

O padrão Caminhos Materializados armazena cada nó de árvore em um documento; Além do nó de árvore, o documento armazena como uma string o(s) ID(s) dos ancestrais ou caminho do nó. Embora o padrão Caminhos Materializados exija etapas adicionais de trabalho com strings e expressões regulares, o padrão também fornece mais flexibilidade no trabalho com o caminho, como localizar nós por caminhos parciais.

Considerar a seguinte hierarquia de categorias:

Modelo de dados em árvore para uma hierarquia de amostra de categorias.

O exemplo seguinte modela a árvore utilizando Caminhos Materializados, armazenando o caminho no campo path; a string de caminho utiliza a vírgula , como um 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," }
] )
  • Você pode executar query para recuperar toda a árvore, classificando pelo campo path:

    db.categories.find().sort( { path: 1 } )
  • Você pode utilizar expressões regulares no campo path para localizar os descendentes de Programming:

    db.categories.find( { path: /,Programming,/ } )
  • Você também pode recuperar os descendentes de Books onde o Books também está no nível superior da hierarquia:

    db.categories.find( { path: /^,Books,/ } )
  • Para criar um índice no campo path utilize a seguinte invocação:

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

    Esse índice pode melhorar o desempenho dependendo da query:

    • Para queries da subárvore raiz Books (por exemplo, /^,Books,/ ou /^,Books,Programming,/), um índice no campo path melhora significativamente o desempenho da query.

    • Para queries de subárvores em que o caminho da raiz não é fornecido na query (por exemplo, /,Databases,/), ou queries semelhantes de subárvores, onde o nó pode estar no meio da string indexada, a query deve inspecionar todo o índice.

      Para essas queries, um index pode fornecer alguma melhoria de desempenho se o index for significativamente menor do que a coleção inteira.

Voltar

Array de ancestrais

Nesta página