MongoDB五种树形结构表示法
2014-08-21 17:38
267 查看
MongoDB五种树形结构表示法
第一种:父链接结构
db.categories.insert( { _id: "MongoDB", parent: "Databases" } )db.categories.insert( { _id: "dbm", parent: "Databases" } )db.categories.insert( { _id: "Databases", parent: "Programming" } )db.categories.insert( { _id: "Languages", parent: "Programming" } )db.categories.insert( { _id: "Programming", parent: "Books" } )db.categories.insert( { _id: "Books", parent: null } )特征:
快速获取父节点:
db.categories.findOne( { _id: "MongoDB" } ).parent
方便创建父节点索引
db.categories.ensureIndex( { parent: 1 } )
通过查询父节点获取儿子节点
db.categories.find( { parent: "Databases" } )
4.需要多个查询来检索子树。
第二种:子链接结构
db.categories.insert( { _id: "MongoDB", children: [] } )db.categories.insert( { _id: "dbm", children: [] } )db.categories.insert( { _id: "Databases", children: [ "MongoDB", "dbm" ] } )db.categories.insert( { _id: "Languages", children: [] } )db.categories.insert( { _id: "Programming", children: [ "Databases", "Languages" ] } )db.categories.insert( { _id: "Books", children: [ "Programming" ] } )特征:
快速获取儿子节点
db.categories.findOne( { _id: "Databases" } ).children
方便创建子节点索引
db.categories.ensureIndex( { children: 1 } )
通过查询儿子节点获取父节点
db.categories.find( { children: "MongoDB" } )
适合存储存储图,一个节点可能有多个父母。
第三种:祖先队列结构
db.categories.insert( { _id: "MongoDB", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" } )db.categories.insert( { _id: "dbm", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" } )db.categories.insert( { _id: "Databases", ancestors: [ "Books", "Programming" ], parent: "Programming" } )db.categories.insert( { _id: "Languages", ancestors: [ "Books", "Programming" ], parent: "Programming" } )db.categories.insert( { _id: "Programming", ancestors: [ "Books" ], parent: "Books" } )db.categories.insert( { _id: "Books", ancestors: [ ], parent: null } )特征:
快速获取祖先
db.categories.findOne( { _id: "MongoDB" } ).ancestors
方便创建祖先节点索引
db.categories.ensureIndex( { ancestors: 1 } )
通过查询祖先来获取后代
db.categories.find( { ancestors: "Programming" } )
祖先模式略慢于物化路径模式
第四种:物化路径结构
db.categories.insert( { _id: "Books", path: null } )db.categories.insert( { _id: "Programming", path: ",Books," } )db.categories.insert( { _id: "Databases", path: ",Books,Programming," } )db.categories.insert( { _id: "Languages", path: ",Books,Programming," } )db.categories.insert( { _id: "MongoDB", path: ",Books,Programming,Databases," } )db.categories.insert( { _id: "dbm", path: ",Books,Programming,Databases," } )特征:
通过查询检索排序
db.categories.find().sort( { path: 1 } )
快速查找子节点
db.categories.find( { path: /^,Books,/ } )db.categories.find( { path: /^,Books,/ } )
为路径创建索引
db.categories.ensureIndex( { path: 1 } )
第五种:集合模型
db.categories.insert( { _id: "Books", parent: 0, left: 1, right: 12 } )db.categories.insert( { _id: "Programming", parent: "Books", left: 2, right: 11 } )db.categories.insert( { _id: "Languages", parent: "Programming", left: 3, right: 4 } )db.categories.insert( { _id: "Databases", parent: "Programming", left: 5, right: 10 } )db.categories.insert( { _id: "MongoDB", parent: "Databases", left: 6, right: 7 } )db.categories.insert( { _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 } } );
内容修改很低效适合静态树。
相关文章推荐
- MongoDB五种树形结构表示法
- MongoDB五种树形结构表示法
- POJ2342 简单树形DP(两种树的表示结构,点为主和边为主)
- 数据结构学习笔记(三) 树形结构之一般二叉树的顺序存储_二叉链表表示法_转换
- 推荐一个好用的html树形结构组件ZTree
- 【easyui】treeGrid显示树形结构
- 图解数据结构(1)——大圈表示法、动态数组和单向链表
- 179_08_IO流_UML表示Input_OutputStream的继承结构图
- [学习笔记]zTree是一个很好的js插件实现加载树形结构
- XML Tree(树形结构)
- 存储树形结构的一些思考
- oracle 查询树形结构最底级节点
- 图 - 图的存储结构 - 邻接矩阵表示法
- --带序号的树形结构
- 数组的顺序结构表示和实现
- 数据结构之树形结构
- 28款jQuery Tree 树形结构插件
- 7.5.1 用结构模式表示数据
- 数据结构笔记3 线性表的链式表示
- 表示-抽象-控制——系统结构模式学习笔记