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"
}
廣告