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

鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ MongoDB關(guān)聯(lián)關(guān)系
MongoDB教程
MongoDB覆蓋查詢
MongoDB數(shù)據(jù)建模
MongoDB聚合
MongoDB更改用戶密碼和自定義數(shù)據(jù)
MongoDB用戶
MongoDB分片
MongoDB創(chuàng)建集合
MongoDB文本搜索
MongoDB數(shù)據(jù)類型
MongoDB GridFS
MongoDB索引限制
MongoDB插入文檔
MongoDB刪除集合
MongoDB數(shù)據(jù)庫(kù)引用
MongoDB復(fù)制
MongoDB Map Reduce
Python連接MongoDB操作
MongoDB原子操作
MongoDB特點(diǎn)
MongoDB安全檢查表
MongoDB排序記錄
MongoDB自動(dòng)遞增序列
MongoDB安裝配置(Windows)
MongoDB備份與恢復(fù)
MongoDB安裝配置(Ubuntu)
Ruby連接MongoDB操作
MongoDB部署
MongoDB索引
MongoDB分析查詢
MongoDB投影(選擇字段)
MongoDB刪除數(shù)據(jù)庫(kù)
MongoDB認(rèn)證
MongoDB限制記錄數(shù)
MongoDB添加用戶
MongoDB固定循環(huán)集合
MongoDB高級(jí)索引
MongoDB數(shù)據(jù)庫(kù)的優(yōu)點(diǎn)
MongoDB快速入門
MongoDB創(chuàng)建數(shù)據(jù)庫(kù)
MongoDB啟用身份驗(yàn)證
MongoDB歷史
MongoDB管理用戶和角色
MongoDB安裝配置(RedHat/CentOS)
MongoDB刪除文檔
Java連接MongoDB操作
MongoDB正則表達(dá)式
MongoDB查詢文檔
MongoDB關(guān)聯(lián)關(guān)系
PHP連接MongoDB操作
MongoDB更新文檔
MongoDB ObjectId

MongoDB關(guān)聯(lián)關(guān)系

MongoDB中的關(guān)系表示各個(gè)文檔在邏輯上的相互關(guān)聯(lián)。關(guān)系可以通過(guò)嵌入式和引用方法建模。 這種關(guān)系可以是1:1,1:NN:1N:N。

假設(shè)有一種情況:要存儲(chǔ)用戶的地址。一個(gè)用戶可以擁有多個(gè)地址,這就是1:N關(guān)系。

以下是用戶(user)文檔示例的文檔結(jié)構(gòu) -

{
   "_id":10999110,
   "name": "Maxsu",
   "contact": "13888990021",
   "dob": "1992-10-11"
}

以下是地址(address)文檔的示例文檔結(jié)構(gòu) -

{
   "_id":12200,
   "building": "Hainan Building NO.2100",
   "pincode": 571100,
   "city": "Haikou",
   "province": "Hainan"
}

嵌入式關(guān)系建模

在嵌入式方法中,我們將地址(address)文檔嵌入到用戶(user)文檔中。

{
   "_id": 21000100,
   "contact": "13800138000",
   "dob": "1991-11-11",
   "name": "Maxsu",
   "address": [
      {
         "building": "Hainan Building NO.2100",
         "pincode": 571100,
         "city": "Haikou",
         "province": "Hainan"
      },
      {
         "building": "Sanya Building NO.2100",
         "pincode": 572200,
         "city": "Sanya",
         "province": "Hainan"
      },
   ]
}

該方法將所有相關(guān)數(shù)據(jù)保存在單個(gè)文檔中,這使得檢索和維護(hù)更容易??梢允褂脝蝹€(gè)查詢來(lái)在整個(gè)文檔檢索,例如 -

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

請(qǐng)注意,在上述查詢中,dbusers分別是數(shù)據(jù)庫(kù)和集合。缺點(diǎn)是如果嵌入式文檔的大小如果不斷增長(zhǎng),可能會(huì)影響讀/寫(xiě)性能。

建模參考關(guān)系

這是設(shè)計(jì)規(guī)范化關(guān)系的方法。 在這種方法中,用戶和地址文件將分別維護(hù),但用戶文檔將包含一個(gè)將引用地址文檔的id字段的字段。

{
   "_id":ObjectId("52ffc33321332111sdfaf"),
   "contact": "13800138000",
   "dob": "1991-11-11",
   "name": "Maxsu",
   "address_ids": [
      ObjectId("123123"),
      ObjectId("123412")
   ]
}

如上所示,用戶文檔包含對(duì)應(yīng)地址的ObjectId的數(shù)組字段address_ids。 使用這些ObjectIds,我們可以從那里查詢地址文件并獲取地址詳細(xì)信息。 使用這種方法,需要兩個(gè)查詢:首先從用戶文檔獲取address_ids字段,然后從地址集中獲取這些地址。

>var result = db.users.findOne({"name":"Maxsu"},{"address_ids":1})
>var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})

上一篇:MongoDB覆蓋查詢下一篇:MongoDB索引