Navicat 部落格

2019 年 2 月 19 日,由 Robert Gravelle 撰寫

上週的文章中,我們透過 MongoDB 中的內嵌和參考式方法探討了模型化文件關係的優點和缺點。然後,我們建立內嵌和參考關係,並得到了一些寶貴的經驗。今天,我們將學習如何在 MongoDB 中建立 DBRefs。

比較 DBRef 與參考關係

正如在上週關於 MongoDB 關係的文章中所看到的,我們可以透過建立參考關係在 MongoDB 中將資料庫結構正規化。參考關係通常也稱為手動參考,因為我們手動將被參考文件的 id(或整個文件)儲存在另一個文件中。如果文件包含來自不同集合的參考,我們可以使用 MongoDB DBRefs。

今天的文章作為一個範例,我們將使用 DBRefs 而不是手動引用,讓我們想想一個案例。在不同的集合(address_home、address_office、address_mailing 等)中儲存不同類型的地址(家、辦公室、郵件等)。現在,當使用暂集合的文件參考地址時,它還需要根據地址類型指定要尋找的集合。每當文件需要參考來自許多集合的文件時,我們都應該使用 DBRefs。

DBRefs 的實際效果

DBRefs 是由三個欄位組成:

  • $ref:此欄位指定被參考文件的集合。
  • $id:此欄位指定被參考文件的 _id 欄位。
  • $db:這欄位是選擇性的,包含被參考文件所在的資料庫的名稱。

讓我們修改上週文章中 Barbara Palmer 的地址資訊,刪除內嵌欄位並將其取代為 DBRef。

  • 在 Navicat 編輯器中以在「樹狀檢視」開啟她的資訊。展開第一個地址文件,然後按一下地址欄位下方的加號(+)以插入上面的三個 DBRef 欄位:

  • DBRef 需要地址文件的 $id 欄位。你可以在地址集合中找到。只需從「135 Sycamore Dr.」地址文件中複制:

  • 當完成加入新欄位後,請務必刪除文件中的所有現有地址資訊:

  • 這是完整的 address_home DBRef:

  • 對 Barbara Palmer 的第二個地址採用相同的步驟,除了這次給它指定一個「address_work」的 $ref。

使用新的 DBRefs

現在我們已經使用 DBRefs 更新了員工文件,我們將不得不改變方式從 employees 集合中提取資料。下面的代碼動態地在由 $ref 參數(在我們的例子中為 address_home)指定的集合尋找具有由 DBRef $id 參數指定的 id 的文件:

總結

在今天的文章中,我們學習了如何使用 Navicat for MongoDB 在 MongoDB 中建立 DBRefs。DBRef 非常適合將多個集合中的文件與來自單個集合的文件相連結。話雖如此,如果在多個集合中沒有可供參考的文件,我建議使用手動參考。

如果你想了解有關 Navicat for MongoDB 的更多資訊,請瀏覽產品頁面產品頁面。你是否使用多種資料庫類型?Navicat Premium 12.1 也支援 MongoDB!

Navicat 文章
頻道記錄
分享
部落格封存檔