java - MongoDB 嵌入文档

标签 java mongodb

在使用 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/

相关文章:

java - 外部硬件指纹扫描仪和安卓设备集成

java - 如何遵循 IntelliJ-IDEA 关于 try/catch block 的建议 "catch branch identical"?

node.js - Node.js 中的 Mongoose 静默崩溃

java - 如何在没有objectId的情况下使用spring-data mongodb进行更新插入?

node.js - 连接 MongoDB 与 Mongoose 时遇到问题

java - 如何使用 Java 恢复已删除的文件?

java - Thread.sleep 不会使我的应用程序崩溃

java - 更改 war 文件中的默认页面

javascript - 使用JSON文件将数据插入数据库

javascript - 从数组的数组中的对象获取值