MongoDB教學
MongoDB快速入門
MongoDB歷史
MongoDB特點
MongoDB數據庫的優點
MongoDB安裝配置(Windows)
MongoDB安裝配置(Ubuntu)
MongoDB安裝配置(RedHat/CentOS)
MongoDB數據建模
MongoDB創建數據庫
MongoDB刪除數據庫
MongoDB創建集合
MongoDB刪除集合
MongoDB數據類型
MongoDB插入文檔
MongoDB查詢文檔
MongoDB更新文檔
MongoDB刪除文檔
MongoDB投影(選擇字段)
MongoDB限制記錄數
MongoDB排序記錄
MongoDB索引
MongoDB聚合
MongoDB複製
MongoDB分片
MongoDB備份與恢復
MongoDB部署
Java連接MongoDB操作
Python連接MongoDB操作
PHP連接MongoDB操作
Ruby連接MongoDB操作
MongoDB關聯關係
MongoDB中的關係表示各個文檔在邏輯上的相互關聯。關係可以通過嵌入式和引用方法建模。 這種關係可以是1:1
,1:N
,N:1
或N:N
。
假設有一種情況:要存儲用戶的地址。一個用戶可以擁有多個地址,這就是1:N
關係。
以下是用戶(user
)文檔示例的文檔結構 -
{
"_id":10999110,
"name": "Maxsu",
"contact": "13888990021",
"dob": "1992-10-11"
}
以下是地址(address
)文檔的示例文檔結構 -
{
"_id":12200,
"building": "Hainan Building NO.2100",
"pincode": 571100,
"city": "Haikou",
"province": "Hainan"
}
嵌入式關係建模
在嵌入式方法中,我們將地址(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"
},
]
}
該方法將所有相關數據保存在單個文檔中,這使得檢索和維護更容易。可以使用單個查詢來在整個文檔檢索,例如 -
> db.users.findOne({"name":"Maxsu"},{"address":1, "name":1})
請注意,在上述查詢中,db
和users
分別是數據庫和集合。缺點是如果嵌入式文檔的大小如果不斷增長,可能會影響讀/寫性能。
建模參考關係
這是設計規範化關係的方法。 在這種方法中,用戶和地址文件將分別維護,但用戶文檔將包含一個將引用地址文檔的id
字段的字段。
{
"_id":ObjectId("52ffc33321332111sdfaf"),
"contact": "13800138000",
"dob": "1991-11-11",
"name": "Maxsu",
"address_ids": [
ObjectId("123123"),
ObjectId("123412")
]
}
如上所示,用戶文檔包含對應地址的ObjectId
的數組字段address_ids
。 使用這些ObjectIds,我們可以從那裏查詢地址文件並獲取地址詳細信息。 使用這種方法,需要兩個查詢:首先從用戶文檔獲取address_ids
字段,然後從地址集中獲取這些地址。
>var result = db.users.findOne({"name":"Maxsu"},{"address_ids":1})
>var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})