44

我对 mongodb 相当陌生,虽然我正在尝试进行有序的 mongodb 查询。但是 spring data mongodb 的 sort 方法已被弃用。所以我用org.springframework.data.domain.Sort

Query query = new Query();
query.with(new Sort(Sort.Direction.ASC,"pdate"));
return mongoTemplate.find(query, Product.class);

我使用了这个代码块。但它没有对数据进行排序。那么你能更喜欢使用任何有用的方法来进行这种练习吗?

4

9 回答 9

37

您可以以这种方式定义您的排序以忽略大小写:

new Sort(new Order(Direction.ASC, FIELD_NAME).ignoreCase()
于 2014-11-08T15:05:15.703 回答
16

新答案- Spring Data Moore

利用Sort.by

Query().addCriteria(Criteria.where("field").`is`(value)).with(Sort.by(Sort.Direction.DESC, "sortField"))
于 2019-10-19T06:59:09.253 回答
15

s当您在存储库中编写自定义查询时,您可以在调用期间执行排序。喜欢,

存储库

@Query("{ 'id' : ?0}")
List<Student> findStudent(String id, Sort sort);

在调用期间

Sort sort = new Sort(Sort.Direction.ASC, "date")
List<Student> students = studentRepo.findStudent(1, sort);  

我希望这有帮助!:)

于 2018-07-29T17:49:40.353 回答
6
query.with(new Sort(Sort.Direction.ASC, "timestamp"));

记住 sort 参数作为字段,1 或 -1 分别指定升序或降序排序。

于 2019-08-29T22:20:54.417 回答
4

您可以使用聚合对数据进行排序。您必须使用匹配和分组条件进行聚合查询并展开您的字段。

AggregationOperation match = Aggregation.match(matching criteria);
AggregationOperation group = Aggregation.group("fieldname");
AggregationOperation sort = Aggregation.sort(Sort.Direction.ASC, "fieldname");
Aggregation aggregation = Aggregation.newAggregation(Aggregation.unwind("fieldname"),match,group,sort);
于 2014-09-22T06:48:53.000 回答
3

这是按降序对字段值进行排序的方式。我的字段值为“nominationTimestamp”,但对您而言,它可能是“firstName”。

List<Movie> result = myMovieRepository.findAll(Sort.by(Sort.Direction.DESC, "nominationTimestamp")); 

myMovieRepository 是扩展 MongoRepository<> 的任何类的实例。

于 2021-04-23T05:37:24.513 回答
1

这个对我有用:

query.with(Sort.by(Sort.Order.asc("pdate")));
于 2021-04-29T10:59:29.783 回答
0

我在 spring 数据中使用 TypedAggregation 和 mongoTemplate 来对结果集进行排序和限制。

import static org.springframework.data.mongodb.core.aggregation.Aggregation.limit;
import static org.springframework.data.mongodb.core.aggregation.Aggregation.match;
import static org.springframework.data.mongodb.core.aggregation.Aggregation.newAggregation;
import static org.springframework.data.mongodb.core.aggregation.Aggregation.project;
import static org.springframework.data.mongodb.core.aggregation.Aggregation.sort;
import org.springframework.data.domain.Sort.Direction;

TypedAggregation<ObjectType> agg = newAggregation(ObjectType.class,
    match(matching Criteria),
    project("_id", ...),
    sort(Direction.ASC, "_id"),
    limit(pageSize));

List<RESULT_OBJECT> mappedResult = mongoTemplate.aggregate(agg, COLLECTION_NAME, RESULT_OBJECT.class).getMappedResults();
于 2020-01-02T08:10:47.793 回答
0

spring-data-commons2.3.5 版

构造Sort函数是私有的,所以:

Query query = new Query();
query.with(Sort.by(Sort.Direction.ASC,"pdate"));
return mongoTemplate.find(query, Product.class);
于 2021-04-01T22:07:31.513 回答