我正在将Spring Data 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 Data Mongo在排序后的查询结果中找到第一个文档,而不是我的代码就不得不将整个集合加载到内存中以获取第一个元素?