gpt4 book ai didi

java - MongoDB 嵌入文档

转载 作者:可可西里 更新时间:2023-11-01 09:47:03 25 4
gpt4 key购买 nike

在使用 SQL 后端的 JPA 中,嵌入的表会自动更新。 NoSQL(MongoDB)中是否有一种机制可以实现同样的目标?
这是我要实现的目标的示例:
表格:

Student
Student details
@OnetoMany
Course Details (from another course table)

在 JPA 和 SQL 中,如果更新类(class)详细信息表,则更改会反射(reflect)在引用它的所有学生中。

在 MongoDB 中,文档嵌入其中,而不是使用连接。我们如何在 MongoDB 中解决这个问题?

谢谢,山姆

最佳答案

简而言之,没有。这也是一个苹果和橘子的问题。 MongoDB 是最宽泛意义上的 SQL 替代品。它们都是数据库。 JPA 是一个位于其之上的 ORM 层,它可以做一些事情,比如在底层保持 1:N 和 N:M 关系的一致性。目前没有实现 JPA 或类似东西的 MongoDB ORM 层。

也就是说,在像 mongo 这样的 NoSQL 数据库的上下文中,您的模式是不正确的。您不应在文档中嵌入可重复使用的内容(在大多数情况下,异常(exception)情况涉及性能优化,您会牺牲诸如规范化之类的东西来进行数据复制,从而牺牲性能)。

在这种情况下,您需要一个单独的类(class)详细信息集合,并将该类(class)详细信息的 _id 值数组存储在您的学生文档中。这样您就可以单独修改这个集合,而不必跟踪类(class)详细信息文档的变化。

不要使用 DBRefs对此的引用。 DBRefs 不是对已知类型文档进行 ID 引用的合适工具。请改用简单的 _id 引用。

所以,TL;DR 版本:

  • 将类(class)详细资料单独 Collection
  • 仅将一组 _id 嵌入到您学生的类(class)详细信息文档中

示例:

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

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

关于java - MongoDB 嵌入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7394588/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com