Spring数据mongoGridFsOperation.findOne没有先找到
Spring data mongo GridFsOperation.findOne doesn't find first
我正在使用 Spring 数据 Mongo 版本 1.10.18 和 Java 8。我不明白我在 GridFsOperations.findOne
方法中看到的行为.
Query maxAccountSetVersionQuery = new Query().addCriteria(GridFsCriteria.whereMetaData("tenantId").is(tenantId))
.addCriteria(GridFsCriteria.whereMetaData("contextId").is(businessContextId))
.addCriteria(GridFsCriteria.whereMetaData("collection").is("genericAuthorizationAccount"))
.with(new Sort(Sort.Direction.DESC, "metadata.accountSetVersion"));
final GridFSDBFile findOneResult = gridOperations.findOne(maxAccountSetVersionQuery);
final List<GridFSDBFile> gridFSDBFiles = gridOperations.find(maxAccountSetVersionQuery);
final GridFSDBFile firstInListResult = gridFSDBFiles.get(0);
final String output = String.format("findOneResult: %s\nfirstInListResult: %s",
findOneResult.getMetaData().get("accountSetVersion"),
firstInListResult.getMetaData().get("accountSetVersion"));
System.out.println(output);
控制台输出为:
findOneResult: 1
firstInListResult: 4
这里要明确一点,我期望的答案是 4,这意味着 firstInListResult
正在引用预期的文档。
那么,两个问题:
- 为什么
findOneResult
和 firstInListResult
不在同一文档中引用一个?或者换个方式问,为什么 findOne
找不到第一个文档?
- 有没有办法让 Spring 数据 Mongo 找到排序查询结果中的第一个文档,而不是我的代码必须将整个集合加载到内存中才能获取第一个元素?
事实证明,这是目前 Spring Data MongoDb 的 GridFsTemplate 实现中的一个错误。 https://jira.spring.io/browse/DATAMONGO-2411 令人惊讶的是,就在 4 天前,在我最初提出这个问题之后,才创建了一个带有修复程序的拉取请求。
我正在使用 Spring 数据 Mongo 版本 1.10.18 和 Java 8。我不明白我在 GridFsOperations.findOne
方法中看到的行为.
Query maxAccountSetVersionQuery = new Query().addCriteria(GridFsCriteria.whereMetaData("tenantId").is(tenantId))
.addCriteria(GridFsCriteria.whereMetaData("contextId").is(businessContextId))
.addCriteria(GridFsCriteria.whereMetaData("collection").is("genericAuthorizationAccount"))
.with(new Sort(Sort.Direction.DESC, "metadata.accountSetVersion"));
final GridFSDBFile findOneResult = gridOperations.findOne(maxAccountSetVersionQuery);
final List<GridFSDBFile> gridFSDBFiles = gridOperations.find(maxAccountSetVersionQuery);
final GridFSDBFile firstInListResult = gridFSDBFiles.get(0);
final String output = String.format("findOneResult: %s\nfirstInListResult: %s",
findOneResult.getMetaData().get("accountSetVersion"),
firstInListResult.getMetaData().get("accountSetVersion"));
System.out.println(output);
控制台输出为:
findOneResult: 1
firstInListResult: 4
这里要明确一点,我期望的答案是 4,这意味着 firstInListResult
正在引用预期的文档。
那么,两个问题:
- 为什么
findOneResult
和firstInListResult
不在同一文档中引用一个?或者换个方式问,为什么findOne
找不到第一个文档? - 有没有办法让 Spring 数据 Mongo 找到排序查询结果中的第一个文档,而不是我的代码必须将整个集合加载到内存中才能获取第一个元素?
事实证明,这是目前 Spring Data MongoDb 的 GridFsTemplate 实现中的一个错误。 https://jira.spring.io/browse/DATAMONGO-2411 令人惊讶的是,就在 4 天前,在我最初提出这个问题之后,才创建了一个带有修复程序的拉取请求。