簡體   English   中英

Spring 數據 mongo GridFsOperation.findOne 沒有先找到

[英]Spring data mongo GridFsOperation.findOne doesn't find first

我正在使用 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);

控制台 output 是:

findOneResult: 1
firstInListResult: 4

在這里要清楚,我期望的答案是 4,這意味着firstInListResult正在引用預期的文檔。

所以,兩個問題:

  1. 為什么findOneResultfirstInListResult不引用同一文檔中的一個? 或者換個方式問,為什么findOne找不到第一個文件?
  2. 有沒有辦法讓 Spring Data Mongo 找到排序查詢結果中的第一個文檔,而不是我的代碼必須將整個集合加載到 memory 中才能獲得第一個元素?

事實證明,這目前是 Spring Data MongoDb 的 GridFsTemplate 實現中的一個錯誤。 https://jira.spring.io/browse/DATAMONGO-2411令人驚訝的是,在我最初提出這個問題之后,僅在 4 天前創建了一個帶有修復的拉取請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM