2

Я хочу отсортировать по нескольким полям в mongo db, используя данные весны для mongodb. В настоящее время я пытаюсь добиться этого с помощью агрегации,Данные весны 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); 

Когда я делаю это, сортировка по «типа» и «createdDate» по заказу DESC. Но я хочу, чтобы DESC на «type» и ASC на «createdDate».

Я попытался,

sort(Sort.Direction.DESC, "type"); 
    sort(Sort.Direction.ASC, "createdDate"); 

но это сортирует только на createdDate.

ответ

1

Вы можете попробовать что-то вроде этого.

Aggregation agg = newAggregation(
     match(Criteria.where("userId").is(userId)), 
     sort(Sort.Direction.DESC, "type").and(Sort.Direction.ASC, "createdDate") 
); 
0

Вы можете создать список заказов и использовать его для своего рода, как этот

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) 
); 
1

немного поздно, но и для других людей ... Попробуйте это (весна-данных):

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"));