具有祖先数组的模型树结构

概述

本页介绍了一种数据模型,该模型使用对父节点的引用和存储所有祖先的数组来描述 MongoDB 文档中的树状结构。

模式

Array of Ancestors模式将每个树节点存储在文档中;除了树节点之外,文档还将节点的祖先或路径的 ID 存储在一个数组中。

考虑以下类别层次结构:

类别层次结构示例的树数据模型。

以下示例使用Array of Ancestors对树建模。除了ancestors字段之外,这些文档还在字段中存储了对直接父类别的引用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 }
] )
  • 检索节点的祖先或路径的查询快速而直接:

    db.categories.findOne( { _id: "MongoDB" } ).ancestors
    
  • 您可以在字段上创建索引ancestors以启用祖先节点的快速搜索:

    db.categories.createIndex( { ancestors: 1 } )
    
  • 您可以按字段查询ancestors以查找其所有后代:

    db.categories.find( { ancestors: "Programming" } )
    

Array of Ancestors模式提供了一种快速有效的解决方案,通过在祖先字段的元素上创建索引来查找节点的后代和祖先。这使得Array of Ancestors成为处理子树的不错选择。

Array of Ancestors模式比Materialized Paths模式稍慢, 但更易于使用。

参见

原文 - Model Tree Structures with an Array of Ancestors

译者:景圣

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""