Estruturas de árvore modelo com uma array de ancestrais
Nesta página
Visão geral
Esta página descreve um modelo de dados que descreve uma estrutura semelhante a árvore em documentos do MongoDB usando referências a nós pai e uma array que armazena todos os ancestrais.
Padrão
O padrão Array de Ancestrais armazena cada nó de árvore em um documento. Além do nó de árvore, o documento armazena em uma array o(s) ID(s) dos ancestrais ou caminho do nó.
Considerar a seguinte hierarquia de categorias:
O exemplo seguinte modela a árvore utilizando Array of Ancestors. Além do campo ancestors
, esses documentos também armazenam a referência à categoria pai imediata no 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 } ] )
A query para recuperar os ancestrais ou caminho de um nó é rápida e direta:
db.categories.findOne( { _id: "MongoDB" } ).ancestors Você pode criar um índice no campo
ancestors
para habilitar a pesquisa rápida pelos nós ancestrais:db.categories.createIndex( { ancestors: 1 } ) Você pode executar queries pelo campo
ancestors
para encontrar todos os seus descendentes:db.categories.find( { ancestors: "Programming" } )
O padrão Array of Ancestors fornece uma solução rápida e eficiente para encontrar os descendentes e os ancestrais de um nó, criando um índice sobre os elementos do campo de ancestrais. Isso faz da Array of Ancestors uma boa opção para trabalhar com subrees.
O padrão Array of Ancestors é um pouco mais lento do que o padrão Materialized Paths, mas é mais simples de usar.