java - Spring data mongo GridFsOperation.findOne 没有先找到
问题描述
我正在使用带有 Java 8 的 Spring Data Mongo 版本 1.10.18。我不明白我在使用该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 Data Mongo 在排序的查询结果中找到第一个文档,而不是我的代码必须将整个集合加载到内存中才能获取第一个元素?
解决方案
事实证明,这目前是 Spring Data MongoDb 的 GridFsTemplate 实现中的一个错误。https://jira.spring.io/browse/DATAMONGO-2411令人惊讶的是,在我最初提出这个问题之后,仅在 4 天前创建了一个带有修复的拉取请求。
推荐阅读
- focus - 单击按钮上的事件时打开 NgbTypeahead 下拉菜单
- svn - 文件夹已存在,但它不是 Ansible Subversion 签出中的 Subversion 存储库错误
- autohotkey - 自动点击java程序按钮
- c# - 根据 WPF 条件更改单元格的前景色绑定
- xamarin - Xamarin Forms Bind Array 元素在 listView 内
- api - 在 IBM Cloudant NoSQL DB 上出现错误“需要付款”
- mainframe - SCIM的大型机实现
- raku - 如何使用 :since with CompUnit
- outlook-addin - 日历概览上的 Outlook 加载项按钮
- apache-spark - 是否可以通过纱线 cli 使用应用程序名称获取纱线应用程序 ID