
- MongoDB 教程
- MongoDB - 首頁
- MongoDB - 概述
- MongoDB - 優勢
- MongoDB - 環境
- MongoDB - 資料建模
- MongoDB - 建立資料庫
- MongoDB - 刪除資料庫
- MongoDB - 建立集合
- MongoDB - 刪除集合
- MongoDB - 資料型別
- MongoDB - 插入文件
- MongoDB - 查詢文件
- MongoDB - 更新文件
- MongoDB - 刪除文件
- MongoDB - 投影
- MongoDB - 限制記錄
- MongoDB - 排序記錄
- MongoDB - 索引
- MongoDB - 聚合
- MongoDB - 複製
- MongoDB - 分片
- MongoDB - 建立備份
- MongoDB - 部署
- MongoDB - Java
- MongoDB - PHP
- 高階 MongoDB
- MongoDB - 關係
- MongoDB - 資料庫引用
- MongoDB - 覆蓋查詢
- MongoDB - 查詢分析
- MongoDB - 原子操作
- MongoDB - 高階索引
- MongoDB - 索引限制
- MongoDB - ObjectId
- MongoDB - MapReduce
- MongoDB - 文字搜尋
- MongoDB - 正則表示式
- 使用 Rockmongo
- MongoDB - GridFS
- MongoDB - 封頂集合
- 自動遞增序列
- MongoDB 有用資源
- MongoDB - 問答
- MongoDB - 快速指南
- MongoDB - 有用資源
- MongoDB - 討論
MongoDB - 資料庫引用
正如在 MongoDB 關係的最後一章中所看到的,為了在 MongoDB 中實現規範化的資料庫結構,我們使用引用關係的概念,也稱為手動引用,其中我們手動將引用的文件 ID 儲存在其他文件中。但是,在文件包含來自不同集合的引用的情況下,我們可以使用MongoDB DBRefs。
DBRefs 與手動引用
例如,在一個數據庫中,我們儲存不同型別的地址(家庭、辦公、郵寄等)在不同的集合中(address_home、address_office、address_mailing 等)。現在,當使用者集合的文件引用地址時,它還需要根據地址型別指定要查詢的集合。在這種情況下,文件引用來自多個集合的文件,我們應該使用 DBRefs。
使用 DBRefs
DBRefs 有三個欄位:
$ref - 此欄位指定引用文件的集合
$id - 此欄位指定引用文件的 _id 欄位
$db - 這是一個可選欄位,包含包含引用文件的資料庫的名稱
考慮一個示例使用者文件,其中包含名為address的 DBRef 欄位,如下面的程式碼片段所示:
{ "_id":ObjectId("53402597d852426020000002"), "address": { "$ref": "address_home", "$id": ObjectId("534009e4d852427820000002"), "$db": "tutorialspoint"}, "contact": "987654321", "dob": "01-01-1991", "name": "Tom Benzamin" }
這裡的address DBRef 欄位指定引用的地址文件位於tutorialspoint 資料庫中的address_home 集合中,並且其 ID 為 534009e4d852427820000002。
以下程式碼根據$ref 引數(在本例中為address_home)動態地在指定的集合中查詢 ID 為 DBRef 中$id 引數指定的文件。
>var user = db.users.findOne({"name":"Tom Benzamin"}) >var dbRef = user.address >db[dbRef.$ref].findOne({"_id":(dbRef.$id)})
上述程式碼返回存在於address_home 集合中的以下地址文件:
{ "_id" : ObjectId("534009e4d852427820000002"), "building" : "22 A, Indiana Apt", "pincode" : 123456, "city" : "Los Angeles", "state" : "California" }
廣告