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 正在引用预期的文档。

那么,两个问题:

  1. 为什么 findOneResultfirstInListResult 不在同一文档中引用一个?或者换个方式问,为什么 findOne 找不到第一个文档?
  2. 有没有办法让 Spring 数据 Mongo 找到排序查询结果中的第一个文档,而不是我的代码必须将整个集合加载到内存中才能获取第一个元素?

事实证明,这是目前 Spring Data MongoDb 的 GridFsTemplate 实现中的一个错误。 https://jira.spring.io/browse/DATAMONGO-2411 令人惊讶的是,就在 4 天前,在我最初提出这个问题之后,才创建了一个带有修复程序的拉取请求。