NoSQL数据模型设计 - 树结构建模 - 嵌套集合模式

2020-09-30  本文已影响0人  李桐2000

本文为NoSQL数据模型设计系列的一部分。

此模式采用双向遍历方式标注树上的每个节点。每个节点是一个文档,并且节点将出程遍历的序号保存为左序号字段,将回程遍历的序号保存为右序号字段。

以下图为例

创建文档

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

此模式提供一个快速高效的方式获取节点的子树,但是修改树结构时需要额外的操作更新左右序号,故此,此模式最好使用在静态树上。

完整内容请查看NoSQL数据模型设计系列

上一篇 下一篇

猜你喜欢

热点阅读