使用Spring Boot和MongoTemplate对MongoDB结果进行排序

问题描述

目标

我想要这个查询

db.getCollection("employees").find().sort({
  hire_date: 1
}).limit(10)

在Spring Boot中用MongoTemplate编写。

研究

我看过很多关于排序的帖子和网站,例如

尝试

我已经尝试了很多方法,但是我仍然不知道该怎么做。下面列出了我尝试过的一些事情:

@Service
public class MongoService {

    @Autowired
    private MongoTemplate mongoTemplate;

    public Document simpleQuery() {

        // 1st
        mongoTemplate.aggregate(Arrays.asList(
                sort(Sorts.ascending("hire_date")),limit(10)
        ));

        // 2nd
        mongoTemplate.findAll(Employee.class).sort(new BasicDBObject("hire_date",1));

        // 3rd
        mongoTemplate.findAll(Employee.class).sort((o1,o2) -> o1.getHire_date() > o2.getHire_date());

        // and more...
    }
}

我猜想解决方案可能非常简单,就像查询本身一样,但这是我基于这种基础的第一步。在此先感谢您的帮助。

解决方法

尝试一下,

Aggregation aggregation = Aggregation.newAggregation(
    sort(Sort.Direction.ASC,"hire_date"),limit(10)
).withOptions(AggregationOptions.builder().allowDiskUse(Boolean.TRUE).build());

mongoTemplate.aggregate(aggregation,mongoTemplate.getCollectionName(Employee.class),Object.class).getMappedResults();
,

您可以执行以下操作。

  1. 您需要查询部分
//As you need to match all
Query query = new Query()
  1. 您需要添加排序选项
//You need to use Sort class with sorting order,field name to be used for sorting
query.with(new Sort(Sort.Direction.ASC,"hire_date"));
  1. 您需要添加分页选项
final Pageable pageableRequest = PageRequest.of(0,10);
query.with(pageableRequest);
  1. 您需要添加模型
mongoTemplate(query,Employee.class)

Sample refer

Another useful answer

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...