2016-09-16 5 views
1

Мое приложение использует данные Spring Mongodb, и я пытаюсь сортировать данные в порядке убывания внутри встроенного документа, который НЕ работает.Данные о Spring Mongodb Aggregation SORT order

Пожалуйста, обратитесь ниже JSON документа & Aggregation запрос:

JSON - со документа:

{ 
    "_id" : ObjectId("57c6fd7099275c83e6a5b312"), 
    "from" : "China", 
    "stockDemandPerItem" : [ 
     { 
      "item" : "apples", 
      "demand" : 150.0 
     }, 
     { 
      "item" : "plums", 
      "demand" : 200.0 
     }, 
     { 
      "item" : "pears", 
      "demand" : 250.0 
     }, 
     { 
      "item" : "oranges", 
      "demand" : 100.0 
     } 
    ] 
} 

Spring Data MongoDB Aggregation запроса:

TypedAggregation<Stock> typedAggr = 
     newAggregation(Stock.class, unwind("stockDemandPerItem"), 
     project("stockDemandPerItem.item", 
     "stockDemandPerItem.demand"), 
      sort(Direction.DESC, "stockDemandPerItem.demand"), 
      limit(3)); 

AggregationResults<StockDemandPerItem> results = mongoTemplate. 
    aggregate(typedAggr, StockDemandPerItem.class); 

List<StockDemandPerItem> list = results.getMappedResults(); 

for(StockDemandPerItem stockDemandPerItem : list) { 
     System.out.println(stockDemandPerItem.getItem() + 
     " :: " + stockDemandPerItem.getDemand()); 
} 

токовый выход :

яблоки :: 150,0

сливы :: 200,0

апельсины :: 500,0

Ожидаемый выход (по убыванию Сортировать по запросу):

апельсины :: 500,0

сливы :: 200,0

Яблоки: 150,0

Не могли бы вы помочь получить ожидаемый результат в порядке убывания?

Кроме того, я планирую найти максимальное значение «спрос», используя указанный выше запрос с лимитом (1) & Sort-Direction.DESC. Или есть ли другой лучший подход для получения максимального значения «спроса»?

+0

могли бы вы опубликовать свой Stock.java? – alexbt

ответ

0

Мы можем добиться этого, используя Collection sort в java.

Редактировать класс StockDemandPerItem так:

public class StockDemandPerItem implements Comparable<StockDemandPerItem>{ 

//existing code goes here 
@Override 
public int compareTo(StockDemandPerItem compareStockDemand) { 
    //descending order 
    return compareStockDemand.getDemand().compareTo(this.getDemand()); 
    } 
} 

добавить Также эту строку кода перед печатью петлям

Collections.sort(list);