小枝数据mongo GridFsOperation.findOne找不到第一个

时间:2019-11-07 03:10:56

标签: java spring spring-data-mongodb gridfs

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

因此,有两个问题:

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

1 个答案:

答案 0 :(得分:0)

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