首页 > 解决方案 > 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正在引用预期的文档。

所以,两个问题:

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

标签: javaspringspring-data-mongodbgridfs

解决方案


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


推荐阅读