Spring 数据 mongodb 按多个字段排序
Spring data mongodb sort on multiple fields
我想使用 MongoDB 的 Spring 数据对 MongoDB 中的多个字段进行排序。目前我正在尝试使用聚合来实现这一点:
Aggregation agg = newAggregation(
match(Criteria.where("userId").is(userId)),
sort(Sort.Direction.DESC, "type", "createdDate"),
);
AggregationResults<MyBean> results = mongoOperations.aggregate(agg, MyBean.class, MyBean.class);
当我这样做时,它按 type
和 createdDate
按 DESC
顺序排序。但是我希望 type
上的 DESC
和 createdDate
上的 ASC
。
我试过了,
sort(Sort.Direction.DESC, "type");
sort(Sort.Direction.ASC, "createdDate");
但这仅在 createdDate
上排序。
你可以试试这个。
Aggregation agg = newAggregation(
match(Criteria.where("userId").is(userId)),
sort(Sort.Direction.DESC, "type").and(Sort.Direction.ASC, "createdDate")
);
您可以创建订单列表并像这样使用它进行排序
List<Order> orders = new ArrayList<>();
orderQuery.add(new Order(Direction.DESC, "createdDate"));
Sort sorts = new Sort(orders.toArray(new Order[orders.size()]));
Aggregation agg = newAggregation(
match(Criteria.where("userId").is(userId)),
sort(sorts)
);
有点晚了,但对于其他人...
试试这个(对于 spring-数据):
private static final Sort NOTE_SORT = new Sort(new Sort.Order(Sort.Direction.ASC, "seen"),
new Sort.Order(Sort.Direction.DESC, "date"),
new Sort.Order(Sort.Direction.ASC, "done"));
没有聚合对象的简单排序
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
//query: existing mongo query
//mongoTemplate: @Autowired MongoTemplate object
//First create a list of Sort.Order and add multiple criteria's
List<Sort.Order> sortOnMultipleFIelds = new ArrayList<>();
sortOnMultipleFIelds.add(new Sort.Order(Sort.Direction.DESC, "Field1"));
sortOnMultipleFIelds.add(new Sort.Order(Sort.Direction.ASC, "Field2"));
sortOnMultipleFIelds.add(new Sort.Order(Sort.Direction.DESC, "Field3"));
//Apply it on Query
query.with(Sort.by(sortOnMultipleFIelds);
//Execute query
List<ClassName> resultList= mongoTemplate.find(query, ClassName.class);
我想使用 MongoDB 的 Spring 数据对 MongoDB 中的多个字段进行排序。目前我正在尝试使用聚合来实现这一点:
Aggregation agg = newAggregation(
match(Criteria.where("userId").is(userId)),
sort(Sort.Direction.DESC, "type", "createdDate"),
);
AggregationResults<MyBean> results = mongoOperations.aggregate(agg, MyBean.class, MyBean.class);
当我这样做时,它按 type
和 createdDate
按 DESC
顺序排序。但是我希望 type
上的 DESC
和 createdDate
上的 ASC
。
我试过了,
sort(Sort.Direction.DESC, "type");
sort(Sort.Direction.ASC, "createdDate");
但这仅在 createdDate
上排序。
你可以试试这个。
Aggregation agg = newAggregation(
match(Criteria.where("userId").is(userId)),
sort(Sort.Direction.DESC, "type").and(Sort.Direction.ASC, "createdDate")
);
您可以创建订单列表并像这样使用它进行排序
List<Order> orders = new ArrayList<>();
orderQuery.add(new Order(Direction.DESC, "createdDate"));
Sort sorts = new Sort(orders.toArray(new Order[orders.size()]));
Aggregation agg = newAggregation(
match(Criteria.where("userId").is(userId)),
sort(sorts)
);
有点晚了,但对于其他人... 试试这个(对于 spring-数据):
private static final Sort NOTE_SORT = new Sort(new Sort.Order(Sort.Direction.ASC, "seen"),
new Sort.Order(Sort.Direction.DESC, "date"),
new Sort.Order(Sort.Direction.ASC, "done"));
没有聚合对象的简单排序
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
//query: existing mongo query
//mongoTemplate: @Autowired MongoTemplate object
//First create a list of Sort.Order and add multiple criteria's
List<Sort.Order> sortOnMultipleFIelds = new ArrayList<>();
sortOnMultipleFIelds.add(new Sort.Order(Sort.Direction.DESC, "Field1"));
sortOnMultipleFIelds.add(new Sort.Order(Sort.Direction.ASC, "Field2"));
sortOnMultipleFIelds.add(new Sort.Order(Sort.Direction.DESC, "Field3"));
//Apply it on Query
query.with(Sort.by(sortOnMultipleFIelds);
//Execute query
List<ClassName> resultList= mongoTemplate.find(query, ClassName.class);