MongoDB常用数据建模方式:1)文档关系建模,2)树结构建模
模型:
|-- 1、文档关系建模
| |-- 1)内嵌文档模型
| |-- 2)内嵌文档模型
|-- 2、树结构建模
|-- 1)父文档引用
|-- 2)子文档引用
|-- 3)祖先数组
|-- 4)物化路径
|-- 5)嵌套集合
以下记录了常用的建模及每一种模型的具体相关示例代码:
一、文档关系建模:
1)内嵌文档模型
[html] view plain copy
- {
- _id: "joe",
- name: "Joe Bookreader",
- address: {
- street: "123 Fake Street",
- city: "Faketon",
- state: "MA",
- zip: "12345"
- }
- }
2)文档引用模型
[html] view plain copy
- {
- _id: "joe",
- name: "Joe Bookreader"
- }
- {
- patron_id: "joe",
- street: "123 Fake Street",
- city: "Faketon",
- state: "MA",
- zip: "12345"
- }
二、树结构建模
树形业务结构图:
(注:引用自mongodb中文官网图)
1)父文档引用
[html] view plain copy
- 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 } )
2)子文档引用
[html] view plain copy
- 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" ] } )
3)祖先数组
[html] view plain copy
- 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 } )
4)物化路径
[html] view plain copy
- 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," } )
5)嵌套集合
[html] view plain copy
- 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 } )