MongoDB一对多存储

本文通过一个顾客及其多个地址的关系建模实例,对比了规范化(引用)与非规范化(内嵌)两种存储方式的区别。规范化存储将地址文档作为单独集合,并保留指向顾客文档的引用;而非规范化存储则直接将地址数据内嵌于顾客文档中。

一个针对于顾客和其多个地址关系建模的一个例子

分别使用规范化(引用)和非规范化(内嵌)存储:

1、规范化存储:

(在一个规范化的数据模型中, address 文档包含一个对父文档 patron 的引用):

 

[html] view plain copy

 print?

  1. {  
  2.    _id: "joe",  
  3.    name: "Joe Bookreader"  
  4. }  
  5.   
  6. {  
  7.    patron_id: "joe",  
  8.    street: "123 Fake Street",  
  9.    city: "Faketon",  
  10.    state: "MA",  
  11.    zip: "12345"  
  12. }  
  13.   
  14. {  
  15.    patron_id: "joe",  
  16.    street: "1 Some Other Street",  
  17.    city: "Boston",  
  18.    state: "MA",  
  19.    zip: "12345"  
  20. }  

 

 

2、非规范化存储:

(把 address 数据直接内嵌到 patron 文档里面)

 

[html] view plain copy

 print?

  1. {  
  2.    _id: "joe",  
  3.    name: "Joe Bookreader",  
  4.    addresses: [  
  5.                 {  
  6.                   street: "123 Fake Street",  
  7.                   city: "Faketon",  
  8.                   state: "MA",  
  9.                   zip: "12345"  
  10.                 },  
  11.                 {  
  12.                   street: "1 Some Other Street",  
  13.                   city: "Boston",  
  14.                   state: "MA",  
  15.                   zip: "12345"  
  16.                 }  
  17.               ]  
  18.  }  

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值