文档菜单
文档首页
/
MongoDB 手册
/ / /

使用嵌套集合构建模型树结构

本页内容

  • 概述
  • 模式

本文档描述了一个数据模型,该模型描述了一个类似于树的结构,以牺牲树的易变性为代价来优化发现子树。

嵌套集模式将树中的每个节点标识为树的一次往返遍历中的停靠点。应用会两次访问树中的每个节点;第一次在初始行程中,第二次在返回行程中。《嵌套集》模式在每个文档中存储每个树节点;除了树节点外,文档还存储节点的父节点ID、节点在left字段的初始停靠点和其在right字段中的返回停靠点。left

考虑以下类别的层次结构

Example of a hierarchical data. The numbers identify the stops at nodes during a roundtrip traversal of a tree.

以下示例使用嵌套集来模拟树

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 } } );

嵌套集模式为查找子树提供了快速有效的解决方案,但修改树结构效率较低。因此,此模式最适合静态树,这些树不经常改变。

返回

材料化路径

本页内容