在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)庫/ 關(guān)系
更新文檔
GridFS
Rockmongo 管理工具
Map Reduce
Java
創(chuàng)建備份
數(shù)據(jù)模型
創(chuàng)建數(shù)據(jù)庫
映射
查詢文檔
索引限制
ObjectId
刪除文檔
數(shù)據(jù)類型
高級索引
索引
優(yōu)勢
記錄排序
查詢分析
插入文檔
刪除集合
全文檢索
創(chuàng)建集合
概述
數(shù)據(jù)庫引用
覆蓋索引查詢
安裝環(huán)境
PHP
刪除數(shù)據(jù)庫
固定集合
關(guān)系
聚合
自動增長
復(fù)制
限制記錄
部署
分片
正則表達式
原子操作

關(guān)系

MongoDB 中的關(guān)系表示文檔之間的邏輯相關(guān)方式。關(guān)系可以通過內(nèi)嵌(Embedded)或引用(Referenced)兩種方式建模。這樣的關(guān)系可能是 1:1、1:N、N:1,也有可能是 N:N。

先來考慮保存用戶地址的例子。一個用戶可能有多個地址,這是一個 1:N 的關(guān)系。

下面是一個結(jié)構(gòu)非常簡單的 user 文檔。

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "name": "Tom Hanks",
   "contact": "987654321",
   "dob": "01-01-1991"
}

下面是 address 文檔的結(jié)構(gòu):

{
   "_id":ObjectId("52ffc4a5d85242602e000000"),
   "building": "22 A, Indiana Apt",
   "pincode": 123456,
   "city": "Los Angeles",
   "state": "California"
} 

內(nèi)嵌關(guān)系的建模

利用內(nèi)嵌方法,我們將把地址文檔內(nèi)嵌到 user 文檔中。

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address": [
      {
         "building": "22 A, Indiana Apt",
         "pincode": 123456,
         "city": "Los Angeles",
         "state": "California"
      },
      {
         "building": "170 A, Acropolis Apt",
         "pincode": 456789,
         "city": "Chicago",
         "state": "Illinois"
      }]
} 

該方法會將所有相關(guān)數(shù)據(jù)都保存在一個文檔中,從而易于檢索和維護。通過一個查詢命令就能檢索整個文檔:

>db.users.findOne({"name":"Tom Benzamin"},{"address":1})

其中的 dbusers 分別對應(yīng)的是數(shù)據(jù)庫和集合。

這種方法的缺點是,如果內(nèi)嵌文檔不斷增長,會對讀寫性能造成影響。

引用關(guān)系的建模

這是一種設(shè)計歸一化關(guān)系的方法。按照這種方法,所有的用戶和地址文檔都將分別存放,而用戶文檔會包含一個字段,用來引用地址文檔 id 字段。

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address_ids": [
      ObjectId("52ffc4a5d85242602e000000"),
      ObjectId("52ffc4a5d85242602e000001")
   ]
}

如上所示,user 文檔包含的數(shù)組字段 address_ids 含有相應(yīng)地址的 ObjectId 對象。利用這些 ObjectId,能夠查詢地址文檔,從而獲取地址細節(jié)信息。利用這種方法時,需要進行兩種查詢:首先從 user 文檔處獲取 address_ids,其次從 address 集合中獲取這些地址。

>var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})
>var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})
上一篇:Map Reduce下一篇:記錄排序