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