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

鍍金池/ 教程/ 數(shù)據(jù)庫/ 數(shù)據(jù)庫引用
更新文檔
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ù)制
限制記錄
部署
分片
正則表達(dá)式
原子操作

數(shù)據(jù)庫引用

在上一節(jié)中,我們使用引用關(guān)系實(shí)現(xiàn)了歸一化的數(shù)據(jù)庫結(jié)構(gòu),這種引用關(guān)系也被稱作手動引用,即可以手動地將引用文檔的 id 保存在其他文檔中。但在有些情況下,文檔包含其他集合的引用時(shí),我們可以使用數(shù)據(jù)庫引用(MongoDB DBRefs)。

數(shù)據(jù)庫引用 vs 手動引用

我們將利用一個(gè)例子來展示如何用數(shù)據(jù)庫引用代替手動引用。假設(shè)一個(gè)數(shù)據(jù)庫中存儲有多個(gè)類型的地址(家庭地址、辦公室地址、郵件地址,等等),這些地址保存在不同的集合中(address_home、address_office、address_mailing,等等)。當(dāng) user 集合的文檔引用了一個(gè)地址時(shí),它還需要按照地址類型來指定所需要查看的集合。這種情況下,一個(gè)文檔引用了許多結(jié)合的文檔,所以就應(yīng)該使用 DBRef。

使用數(shù)據(jù)庫引用

在 DBRef 中有三個(gè)字段:

$ref 該字段指定所引用文檔的集合。
$id 該字段指定引用文檔的 -id 字段 $db 該字段是可選的,包含引用文檔所在數(shù)據(jù)庫的名稱。

假如在一個(gè)簡單的 user 文檔中包含著 DBRef 字段 address,如下所示:

{
   "_id":ObjectId("53402597d852426020000002"),
   "address": {
   "$ref": "address_home",
   "$id": ObjectId("534009e4d852427820000002"),
   "$db": "tutorialspoint"},
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin"
}

數(shù)據(jù)庫引用字段 address 指定出,引用地址文檔位于 tutorialspoint 數(shù)據(jù)庫的 address_home 集合中,并且它的 id 為 534009e4d852427820000002。

下例展示了,在由 $ref 所指定的集合(本例中為 address_home)中,如何動態(tài)查找由 $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"
}
上一篇:ObjectId下一篇:數(shù)據(jù)類型