排序 MongoDB 结果使用 Spring Boot with MongoTemplate
Sorting MongoDB results using Spring Boot with MongoTemplate
目标
我想查询:
db.getCollection("employees").find().sort({
hire_date: 1
}).limit(10)
在 Spring Boot.
中使用 MongoTemplate 编写
研究
我看过很多关于排序的帖子和网站,例如
- https://www.baeldung.com/java-mongodb-aggregations
- Spring + MongoDB - MongoTemplate + Criteria Query
- Spring MongoDB query sorting
尝试次数
我已经尝试了很多方法,但我仍然无法弄清楚如何才能做到这一点。下面列出了我尝试过的一些方法:
@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();
您可以按照以下方式进行。
- 您需要一个查询部分
//As you need to match all
Query query = new Query()
- 您需要添加排序选项
//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"));
- 您需要添加分页选项
final Pageable pageableRequest = PageRequest.of(0, 10);
query.with(pageableRequest);
- 您需要添加一个模型
mongoTemplate(query, Employee.class)
Another useful answer
目标
我想查询:
db.getCollection("employees").find().sort({
hire_date: 1
}).limit(10)
在 Spring Boot.
中使用 MongoTemplate 编写研究
我看过很多关于排序的帖子和网站,例如
- https://www.baeldung.com/java-mongodb-aggregations
- Spring + MongoDB - MongoTemplate + Criteria Query
- Spring MongoDB query sorting
尝试次数
我已经尝试了很多方法,但我仍然无法弄清楚如何才能做到这一点。下面列出了我尝试过的一些方法:
@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();
您可以按照以下方式进行。
- 您需要一个查询部分
//As you need to match all
Query query = new Query()
- 您需要添加排序选项
//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"));
- 您需要添加分页选项
final Pageable pageableRequest = PageRequest.of(0, 10);
query.with(pageableRequest);
- 您需要添加一个模型
mongoTemplate(query, Employee.class)
Another useful answer