java - spring data mongodb 支持手动引用还是仅支持 DBrefs?

标签 java mongodb spring-data-mongodb nosql

我正在使用 spring data mongodb 并希望在我的应用程序中使用手动引用并根据需要解决它们。我阅读了 spring data mongodb 文档,但找不到 spring 是否支持手动引用?它支持 DBRefs 并急切地解决它们,这是我不想要的。 有谁知道如何使用 spring 数据的手动引用或者它是否完全支持?我问这个是因为 mongodb 文档推荐这个并且它适合大多数用例。

最佳答案

这取决于您所说的“支持”是什么意思。 mongo 文档实际上建议使用手动引用而不是使用 DBRefs。 DBRef 所做的只是存储集合名称和文档 ID。如果正在使用多个数据库并且您指的是另一个数据库中的内容,它可以选择存储数据库名称。

DBRef 的好处在于,当您加载包含 DBRef 的文档时,会自动获取引用的文档。 DBRefs 的痛苦在于引用的文档总是被加载,因为它是一个贪婪的加载。

如果您知道文档将存储在哪里,通常将引用文档的 ID 存储在字段中并自行加载引用文档比使用 DBRef 更容易和更有效。

您如何使用手册引用完全取决于您希望它们如何工作,而您的问题并没有具体说明那么多细节。

{
  "_id" : [some id],
  "refId" : [some other id]
}

更新:

刚刚注意到Spring Data终于实现了DBRefs的延迟加载,所以可以使用注解@DBRef(lazy = true),按需加载ref。不使用 DBRefs 的主要原因已被删除,因此您需要决定进行手动引用的额外工作是否值得

更新#2

使用 DBRefs 一段时间后,我真的希望我没有使用过它们。它们不能很好地处理聚合,并试图通过 shell 对它们进行查询和更新,这通常很痛苦。我会说,如果您的用例足够简单,MongoDB 建议进行手动引用而不是使用 DBRef,这也是我的建议。

关于java - spring data mongodb 支持手动引用还是仅支持 DBrefs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23410168/

相关文章:

node.js - 使用 MongoDB 对 Windows Azure 上的 node.js 应用程序的首次请求产生 400 Bad Request

mongodb查找具有相同键值的文档但不知道该值是什么

mongodb - MongoDB : Get all documents inserted after the last known one

java - Mongodb 读取查询使用 Spring Data 非常慢,而使用 Morphia 则速度很快

java - Spring Data Mongodb - 获取页面上的最后一项

java - ANT Jenkins 单元测试 - 计算失败的测试

java - Spring HATEOAS 1.x 上的 ResourceSupport.getId()

mongodb - Spring Data MongoDB - 持久化列表时出现类转换异常

java - 自定义连接池慢(JAVA)?

java - 使用Tomcat配置时如何在Idea中重新部署javascript