簡體   English   中英

MongoDB嵌入式文檔

[英]MongoDB embedded document

在使用SQL后端的JPA中,嵌入式表會自動更新。 NoSQL(MongoDB)中是否有一種機制可以實現相同的目標?
這是我想要實現的一個例子:
表:

學生
學生詳情
@OneToMany
課程詳情(來自其他課程表)

在JPA和SQL中,如果更新“課程詳細信息”表,則更改將反映在引用它的所有學生中。

在MongoDB中,不是使用連接,而是將文檔嵌入其中。 我們如何在MongoDB中解決這個問題?

謝謝,山姆

簡而言之,沒有。 這也是一個蘋果和橘子的問題。 MongoDB是最松散意義上的SQL替代品。 他們都是數據庫。 JPA是一個ORM層,可以做一些事情,比如保持你的1:N和N:M關系一致。 目前沒有實現JPA或接近它的東西的MongoDB ORM層。

也就是說,在類似於mongo的NoSQL數據庫的上下文中,您的架構不正確。 您不應該嵌入具有重用內容的文檔(在大多數情況下,異常涉及性能優化,在這種情況下,您會犧牲數據復制的規范化以及性能等)。

在這種情況下,您需要一個單獨的課程詳細信息集合,並在學生文檔中存儲該課程詳細信息的_id值數組。 這樣,您可以單獨修改此集合,而無需跟蹤課程詳細信息文檔的突變。

不要為此使用DBRefs引用。 DBRefs不是用於對已知類型的文檔進行ID引用的適當工具。 請改用簡單的_id引用。

所以,TL; DR版本:

  • 將課程詳細文檔放在單獨的集合中
  • 僅在學生的課程詳細信息文檔中嵌入一組_id

示例:

db.students {
    _id: ..,
    name: Willy Wonka,
    courses: [..,..,..]
}

db.courses {
    _id: ..,
    course: "MongoDB for Dummies"
}

您可以使用引用而不是嵌入的文檔。 然后,課程數據只有一個副本,所有學生必須根據定義引用相同的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM