我无法使用Mongodb对搜索结果进行排序,我添加了一个使用findAllByorderByDateDesc()的方法查询
我试着使用“findAllByOrderByDateDesc(),如果我不做搜索查询,它会工作,但一旦我添加了@Query注解,它就停止按日期排序。
储存库
@Repository
public interface WarrantiesRepository extends MongoRepository<WarrantyModel, String> {
public Page<WarrantyModel> findAllByOrderByDateDesc(PageRequest pageRequest);
@Query("{$text: {$search: ?0}}")
public Page<WarrantyModel> findAllByOrderByDateDesc(String search, PageRequest pageRequest);
public WarrantyModel getWarrantyById(String id);
public WarrantyModel getWarrantyByCar(String car);
public WarrantyModel getWarrantyByPart(String part);
public WarrantyModel getWarrantyBypartNumber(String partNumber);
}
主计长
@PostMapping("/warranties/search")
public ModelAndView getLiveWarranties(@RequestBody String search, Model model) {
input = search.substring(1, search.length()-1);
if(search.length() == 2) {
warranties = warrantiesRepository.findAllByOrderByDateDesc(PageRequest.of(currentPage, pageSize));
} else {
warranties = warrantiesRepository.findAllByOrderByDateDesc(search, PageRequest.of(currentPage, pageSize));
}
ModelAndView mv = new ModelAndView("warranties::search");
mv.addObject("warranties", warranties);
return mv;
}
型号
@Component
@Document("Warranty")
public class WarrantyModel {
@Id
public String id;
@TextIndexed
public String car;
@TextIndexed
public String part;
public String store;
@TextIndexed
public String partNumber;
public String warranty;
public LocalDate date;
Constructors/getter/setters
1条答案
按热度按时间vmdwslir1#
这是预期的行为。默认情况下,"... Repository“的所有方法都是”派生查询方法“,Spring尝试根据方法名称Map实现(它将为您生成查询)。
一旦您使用
@Query
注解来注解一个方法,Spring希望您指定自己的查询,并且不管方法的名称如何,它都不会自己进行任何派生。查看此文章以获取更详细的说明-Spring Data MongoDB - Guide to the @Query Annotation