NoSQL数据模型设计 - 树结构建模 - 物化路径模式

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

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

此模式每个节点是一个文档,并且节点保存祖先节点的路径字符串。尽管此模式需要处理字符串和正则表达式等额外工作,但它可以提供更大的灵活性比如按照部分路径查询。

以下面分类层级为例

创建文档

db.categories.insertMany( [
   { _id: "Books", path: null },
   { _id: "Programming", path: ",Books," },
   { _id: "Databases", path: ",Books,Programming," },
   { _id: "Languages", path: ",Books,Programming," },
   { _id: "MongoDB", path: ",Books,Programming,Databases," },
   { _id: "dbm", path: ",Books,Programming,Databases," }
] )

按照路径排序获得整棵树

db.categories.find().sort( { path: 1 } )

采用正则表达式获得指定节点的子孙

db.categories.find( { path: /,Programming,/ } )

在path字段上创建索引

db.categories.createIndex( { path: 1 } )

如果查询提供从根节点开始的路径例如/^,Books,/ 或/^,Books,Programming,/,此索引能够快速匹配结果。

如果查询提供中间路径,需要扫描整个索引返回结果。但如果索引比collection小很多,还是能提高性能。

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

上一篇下一篇

猜你喜欢

热点阅读