Поскольку ваш запрос возвращает несколько документов, невозможно заставить его вернуть один Item
напрямую.
Использование Stream
// Repository
@Query(value="{name: ?0, approval: {'$ne': null}}",
sort="{'approval.approvedDate': -1}",
fields = "{ _id: 1 }")
Stream<Item> getLatestApprovedIdByName(String name);
// Service
default Item getLatestApprovedIdByName(String name) {
return getLatestApprovedIdByName(name).stream().findFirst().orElse(null);
}
Из-за способа Stream
работает, вы получите только первый результат запроса вместо всего набора результатов.Для получения дополнительной информации см. Документацию .
Использование Page
и Pageable
// Repository
@Query(value = "{name: ?0, approval: {'$ne': null}}", fields = "{ _id: 1 }")
Page<Item> getLatestApprovedIdByName(String name, Pageable pageable);
// Service
default Item getLatestApprovedIdByName(String name) {
PageRequest request = new PageRequest(0, 1, new Sort(Sort.Direction.DESC, "approval.approvedDate"));
return getLatestApprovedIdByName(name, request).getContent().get(0);
}
Используя PageRequest
, вы можете указать, какмногие результаты, которые вы хотите, а также указать порядок сортировки.На основании этого ответа .