#java #spring #mongodb #spring-data
#java #spring #mongodb #spring-данные
Вопрос:
Я хочу отсортировать результаты с find
помощью запроса mongo JSON и, прочитав и поэкспериментировав, я все еще не могу заставить его работать. У меня есть PagingAndSortingRepository, и я могу использовать Sort()
его для поиска без проблем.
Класс репозитория
public interface ThingRepository extends PagingAndSortingRepository<Thing, ObjectId> {
@org.springframework.data.mongodb.repository.Query("{ name:?0, $or : [ { state:'new' } , {state:'updated'} ] }")
List<Device> findThingsInNewOrUpdatedState(String name);
}
Уровень обслуживания
@Service
public class ThingService() {
@Autowired private ThingRepository thingRepository;
public List<Thing> getSortedThings() {
return (List<Thing>)thingRepository.findAll(new Sort(Sort.Direction.DESC, Arrays.asList("dateModified")));
}
public List<Thing> getNewOrUpdatedThingsSorted() {
return thingRepository.findThingsInNewOrUpdatedState(); // <-- this needs to be sorted
}
}
Запрос преобразуется непосредственно в вызов MongoDB, который работает нормально
db.things.find({ name:'xxx', $or : [ { state:'new' }, {state:'updated'} ] })
и я знаю, что могу добавить a sort()
в обычный синтаксис MongoDB, но не могу понять, как это сделать из Java / Spring Data. Он попытался добавить его в @Query, но это не сработало, так как я думаю, что Spring просто выполняет find()
.
Ответ №1:
Вы должны иметь возможность просто добавить Sort
параметр в метод запроса и, таким образом, динамически передавать Sort
экземпляры, которые будут применены к запросу, определенному в @Query
.
Комментарии:
1. Хм, я почти уверен, что пробовал это, но я могу ошибаться. Я сделаю это позже сегодня и вернусь к вам.
2. Извините, я только что попробовал это. Сортировка отлично работает в качестве параметра метода, например
List<Thing> findByThingId(String thingId, Sort sort);
, но я не могу использоватьSort
с аннотированным пользовательским запросом, например@org.springframework.data.mongodb.repository.Query
. Есть идеи?3. Итак, вы говорите, что конвейер в
Sort
не имеет эффекта, как только вы вручную определяете запрос с помощью@Query
? Если это так, пожалуйста, откройте билет JIRA.4. Исправлена ошибка. Будет доступно в сегодняшнем выпуске snapshot, а также в предстоящем выпуске 1.0 RC1.
5. Нет, пожалуйста, перечитайте комментарии. Объявление метода показано выше. Прокомментируйте это с
@Query("{ 'name' : ?0 }")
помощью и передайтеnew Sort(Order.ASC, "age")
методу.