mongodb数据结构-树

来源:互联网 发布:php判断时间范围 编辑:程序博客网 时间:2024/06/06 00:32

树结构

Model Tree Structures with Parent References(父关联)

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.createIndex( { parent: 1 } )

通过父节点查询子节点:

db.categories.find( { parent: "Databases" } )

Model Tree Structures with Child References(子关联)

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.findOne( { _id: "Databases" } ).children

创建子节点索引:

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

查询包含子节点的所有父节点:

db.categories.find( { children: "MongoDB" } )

Model Tree Structures with an Array of Ancestors(祖先关联)

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.createIndex( { ancestors: 1 } )

访问包含某个祖先的所有节点:

db.categories.find( { ancestors: "Programming" } )

Model Tree Structures with Materialized Paths(路径关联)

将树节点的访问路径拼接成字符串保存到字段:

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

查询方式可以使用正则表达式,类似mysql 前后模糊匹配:

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

也可以使用前缀匹配,即必须以指定字符串开头:

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

创建索引的方式与其他的一样。

小结:

mongodb树结构详情可以参考官方文档, 在项目中可以根据具体的业务需求来设计集合文档的数据结构,
可以同时包含多钟数据结构,即可以同事父关联、子关联、祖先关联等等。

1 0
原创粉丝点击