Spring boot — как я могу сгруппировать и отсортировать в Spring и Mongo?

#java #spring #mongodb #spring-boot

#java #весна #mongodb #spring-boot

Вопрос:

Я создаю службу загрузки Spring, и в коллекции мне нужно найти все документы, поле ‘unidadNegocio’ которых имеет значение, которое я передаю с помощью аргумента, затем агрегировать все элементы, которые имеют одинаковое значение в поле ‘aceptado’, а затем упорядочить эти документы по дате (в виде строки), котораяхранится в поле ‘fecha_estadistica’.

Пока я падаю даже при сортировке их по дате с помощью этой попытки в моем шаблоне репозитория:

 @Query("{'unidadNegocio': ?0}"  
       ".{ $sort: { 'fecha_estadistica' : 1, 'aceptado' : 1 } }")
List<ProductoComprado> findByUnidadNegocioIgnoreCaseAndOrder(String centro);
  

Любая помощь приветствуется, спасибо.

Ответ №1:

Обновите свой метод следующим образом:

 @Query(value = "{'unidadNegocio': ?0}")
List<ProductoComprado> findByUnidadNegocioIgnoreCaseAndOrder(String centro, Sort sort);
  

А затем, когда вы вызываете свой репозиторий, выполните следующие действия:

 Sort sort = Sort.by("aceptado", "fecha_estadistica");
List<ProductoComprado> results = repository.findByUnidadNegocioIgnoreCaseAndOrder("negocio", sort);
  

Или альтернативный вариант, вы можете сделать просто следующее:

 @Query(value = "{'unidadNegocio': ?0}", sort = "{ 'aceptado' : 1, 'fecha_estadistica' : 1 }")
List<ProductoComprado> findByUnidadNegocioIgnoreCaseAndOrder(String centro);
  

а затем просто вызовите свой метод репозитория.

Помните, что значения в спецификации сортировки должны быть именами, которые у вас есть в поле entity, а не в коллекции MongoDB. В этом ответе я предполагаю, что fecha_estadistica и aceptado являются именами полей в вашем классе сущностей.