Добавление сортировки в mongo JSON @Query с хранилищем данных Spring

#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") методу.