在使用SQL后端的JPA中,嵌入式表会自动更新。 NoSQL(MongoDB)中是否有一种机制可以实现相同的目标?
这是我想要实现的一个例子:
表:
学生
学生详情
@OneToMany
课程详情(来自其他课程表)
在JPA和SQL中,如果更新“课程详细信息”表,则更改将反映在所有引用它的学生中。
在MongoDB中,不是使用连接,而是将文档嵌入其中。我们如何在MongoDB中解决这个问题?
谢谢, 萨姆
答案 0 :(得分:2)
简而言之,没有。这也是一个苹果和橘子的问题。 MongoDB是最松散意义上的SQL替代品。他们都是数据库。 JPA是一个ORM层,可以做一些事情,比如保持你的1:N和N:M关系一致。目前没有实现JPA或其附近的MongoDB ORM层。
也就是说,在像mongo这样的NoSQL数据库的上下文中,你的架构是不正确的。您不应该嵌入包含重用内容的文档(在大多数情况下,异常涉及性能优化,在这种情况下,您会牺牲数据复制的标准化以及性能等方面的优势。)
在这种情况下,您需要一个单独的课程详细信息集合,并在学生文档中存储该课程详细信息的_id值数组。这样,您可以单独修改此集合,而无需跟踪课程详细信息文档的突变。
请勿使用DBRefs引用。 DBRefs不是用于对已知类型的文档进行ID引用的适当工具。请改用简单的_id引用。
所以,TL; DR版本:
示例:
db.students {
_id: ..,
name: Willy Wonka,
courses: [..,..,..]
}
db.courses {
_id: ..,
course: "MongoDB for Dummies"
}
答案 1 :(得分:0)
您可以使用reference代替嵌入式文档。然后,只有一份课程数据,所有学生必须按照定义参考相同的信息。