MongoDB数据存储建模

MongoDB常用数据建模方式:1)文档关系建模,2)树结构建模

模型:
|-- 1、文档关系建模
| |-- 1)内嵌文档模型
| |-- 2)内嵌文档模型 
|-- 2、树结构建模
|-- 1)父文档引用
|-- 2)子文档引用 
|-- 3)祖先数组
|-- 4)物化路径 
|-- 5)嵌套集合 

 

以下记录了常用的建模及每一种模型的具体相关示例代码:

一、文档关系建模:
1)内嵌文档模型

[html] view plain copy

 print?

  1. {  
  2.    _id: "joe",  
  3.    name: "Joe Bookreader",  
  4.    address: {  
  5.               street: "123 Fake Street",  
  6.               city: "Faketon",  
  7.               state: "MA",  
  8.               zip: "12345"  
  9.             }  
  10. }  

2)文档引用模型

[html] view plain copy

 print?

  1. {  
  2.    _id: "joe",  
  3.    name: "Joe Bookreader"  
  4. }  
  5.   
  6.   
  7. {  
  8.    patron_id: "joe",  
  9.    street: "123 Fake Street",  
  10.    city: "Faketon",  
  11.    state: "MA",  
  12.    zip: "12345"  
  13. }  

 

二、树结构建模

树形业务结构图:

(注:引用自mongodb中文官网图)

1)父文档引用

[html] view plain copy

 print?

  1. db.categories.insert( { _id: "MongoDB", parent: "Databases" } )  
  2. db.categories.insert( { _id: "dbm", parent: "Databases" } )  
  3. db.categories.insert( { _id: "Databases", parent: "Programming" } )  
  4. db.categories.insert( { _id: "Languages", parent: "Programming" } )  
  5. db.categories.insert( { _id: "Programming", parent: "Books" } )  
  6. db.categories.insert( { _id: "Books", parent: null } )  

2)子文档引用

[html] view plain copy

 print?

  1. db.categories.insert( { _id: "MongoDB", children: [] } )  
  2. db.categories.insert( { _id: "dbm", children: [] } )  
  3. db.categories.insert( { _id: "Databases", children: [ "MongoDB", "dbm" ] } )  
  4. db.categories.insert( { _id: "Languages", children: [] } )  
  5. db.categories.insert( { _id: "Programming", children: [ "Databases", "Languages" ] } )  
  6. db.categories.insert( { _id: "Books", children: [ "Programming" ] } )  

3)祖先数组

[html] view plain copy

 print?

  1. db.categories.insert( { _id: "MongoDB", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" } )  
  2. db.categories.insert( { _id: "dbm", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" } )  
  3. db.categories.insert( { _id: "Databases", ancestors: [ "Books", "Programming" ], parent: "Programming" } )  
  4. db.categories.insert( { _id: "Languages", ancestors: [ "Books", "Programming" ], parent: "Programming" } )  
  5. db.categories.insert( { _id: "Programming", ancestors: [ "Books" ], parent: "Books" } )  
  6. db.categories.insert( { _id: "Books", ancestors: [ ], parent: null } )  

4)物化路径

[html] view plain copy

 print?

  1. db.categories.insert( { _id: "Books", path: null } )  
  2. db.categories.insert( { _id: "Programming", path: ",Books," } )  
  3. db.categories.insert( { _id: "Databases", path: ",Books,Programming," } )  
  4. db.categories.insert( { _id: "Languages", path: ",Books,Programming," } )  
  5. db.categories.insert( { _id: "MongoDB", path: ",Books,Programming,Databases," } )  
  6. db.categories.insert( { _id: "dbm", path: ",Books,Programming,Databases," } )  

5)嵌套集合

[html] view plain copy

 print?

  1. db.categories.insert( { _id: "Books", parent: 0, left: 1, right: 12 } )  
  2. db.categories.insert( { _id: "Programming", parent: "Books", left: 2, right: 11 } )  
  3. db.categories.insert( { _id: "Languages", parent: "Programming", left: 3, right: 4 } )  
  4. db.categories.insert( { _id: "Databases", parent: "Programming", left: 5, right: 10 } )  
  5. db.categories.insert( { _id: "MongoDB", parent: "Databases", left: 6, right: 7 } )  
  6. db.categories.insert( { _id: "dbm", parent: "Databases", left: 8, right: 9 } )  

转载于:https://my.oschina.net/architectliuyuanyuan/blog/1621488

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值