“文档” 菜单
文档首页
/
MongoDB Manual
/ / /

使用祖先数组对树结构进行建模

在此页面上

  • 概述
  • 模式

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

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

以以下类别层次结构为例:

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

以下示例使用祖先数组对树进行建模。除 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" } )

祖先数组模式提供了一种快速有效的解决方案,通过在祖先字段的元素上创建索引来查找节点的后代和祖先。因此,祖先数组是处理子树的不错选择。

祖节点数组模式比物化路径模式稍慢,但使用起来更直接。

← 使用子引用对树结构进行建模

在此页面上