Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

使用嵌套集对树结构进行建模

在此页面上

  • Overview
  • 模式

本文档描述了一种数据模型,该模型描述了一种树状结构。这种树状结构以牺牲树的可变性为代价来优化子树的发现。

嵌套集模式将树中的每个节点标识为树的往返遍历中的停止点。应用程序访问树中的每个节点两次;第一次是在去程期间,第二次是在回程期间。嵌套集模式将每个树节点存储在文档中;除了树节点之外,文档还存储节点父级的 ID、节点在 left 字段中的去程停止点以及在 right 字段中的返程停止点。

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

层级化数据的示例。这些数字标识了树的往返遍历中的停止点。

以下示例使用嵌套集对树进行建模:

db.categories.insertMany( [
{ _id: "Books", parent: 0, left: 1, right: 12 },
{ _id: "Programming", parent: "Books", left: 2, right: 11 },
{ _id: "Languages", parent: "Programming", left: 3, right: 4 },
{ _id: "Databases", parent: "Programming", left: 5, right: 10 },
{ _id: "MongoDB", parent: "Databases", left: 6, right: 7 },
{ _id: "dbm", parent: "Databases", left: 8, right: 9 }
] )

您可以通过查询来检索节点的子节点:

var databaseCategory = db.categories.findOne( { _id: "Databases" } );
db.categories.find( { left: { $gt: databaseCategory.left }, right: { $lt: databaseCategory.right } } );

嵌套集模式为查找子树提供了一种快速高效的解决方案,但在修改树结构方面效率较低。因此,这种模式最适合不发生变化的静态树。

后退

物化路径

在此页面上