Sprig данные Монго GridFsOperation.findOne не находит первым - PullRequest
0 голосов
/ 07 ноября 2019

Я использую 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. ПочемуfindOneResult и firstInListResult не ссылаются на один и тот же документ? Или спросить об этом по-другому: почему findOne не находит первый документ?
  2. Есть ли способ заставить Spring Data Mongo найти первый документ в результатах отсортированного запроса вместо того, чтобы мой код приходилосьзагрузить всю коллекцию в память, чтобы получить первый элемент?

1 Ответ

0 голосов
/ 14 ноября 2019

Оказывается, что это в настоящее время ошибка в реализации GridFsTemplate Spring Data MongoDb. https://jira.spring.io/browse/DATAMONGO-2411 Удивительно, но запрос на удаление с исправлением был создан всего 4 дня назад, после того, как я первоначально задал этот вопрос.

...