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關係的最後一章所示,要在MongoDB中實現規範化的數據庫結構,我們使用引用關係的概念,也稱爲手動引用,將引用的文檔的id
手動存儲在其他文檔中。 但是,如果文檔包含來自不同集合的引用,可以使用MongoDB DBRefs。
DBRefs vs 手動參考
考慮一個示例場景,在這個場景中將使用DBRefs而不是手動引用,設計有一個數據庫中將不同類型的地址(家庭,辦公室,郵件等)存儲在不同的集合(address_home
,address_office
,address_mailing
等)中。 現在,當用戶集合的文檔引用地址時,還需要根據地址類型指定要查找的集合。 在這種情況下,文檔引用了多個集合中的文檔,則應該使用DBRefs。
使用DBRefs
DBRefs中有三個字段 -
-
$ref
- 此字段指定引用文檔的集合 -
$id
- 此字段指定引用文檔的_id
字段 -
$db
- 這是一個可選字段,幷包含引用文檔所在的數據庫的名稱
假設一個具有DBRef字段address
的示例用戶文檔,如代碼片段所示 -
{
"_id":ObjectId("348362491fjaskdlf2314"),
"address": {
"$ref": "address_home",
"$id": ObjectId("sfaafdf4137832149fssa"),
"$db": "yiibai"},
"contact": "13800138000",
"dob": "1991-12-12",
"name": "Maxsu"
}
這裏的 DBRef 字段 address
指定引用的地址文件位於yiibai
數據庫中的address_home
集合中,其ID爲sfaafdf4137832149fssa
。
以下代碼由$ref
參數(在示例中爲address_home
)指定的集合中動態地查找ID爲DBRef中的$id
參數指定的文檔。
>var user = db.users.findOne({"name":"Maxsu"})
>var dbRef = user.address
>db[dbRef.$ref].findOne({"_id":(dbRef.$id)})
以上代碼返回address_home
集合中存在的以下address
文檔中 -
{
"_id" : ObjectId("sfaafdf4137832149fssa"),
"building" : "Hainan Apt No.2100",
"pincode" : 571100,
"city" : "Haikou",
"province" : "Hainan"
}