2013-08-29 103 views
22

我在mongodb上相當新,而我試圖做有序的mongodb查詢。但是春天的數據mongodb的排序方法已被棄用。所以我用org.springframework.data.domain.SortSpring MongoDB查詢排序

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

我用這個代碼塊。但它沒有對數據進行排序。那麼你是否更喜歡使用任何有用的方法來進行這種練習?

+0

您的代碼看起來是正確的,你能否詳細說明你是怎麼接觸到結論「它不是對數據進行排序」 – gerrytan

+2

他們不在頁面 –

回答

18

您可以用這種方式定義排序忽略大小寫:

new Sort(new Order(Direction.ASC, FIELD_NAME).ignoreCase() 
+0

上有序的日期遞增的謝謝,這是我的意思是幾年前在我的答案,我接受你的答案。 –

+0

實際上,您可以將逗號分隔列表(或預構造列表)傳遞給排序構造函數並定義多個排序條件! – th3morg

+2

它不工作在我身上,用最新的MongoDb,奇怪的...我有Mongo和代碼那樣的例外... java.lang.IllegalArgumentException:給定的排序包含用戶名的順序忽略大小寫! MongoDB目前不支持排序忽略情況! –

0

我的問題的代碼是真實的,現在我看到,在字段'pdate'上有一個camelCase問題。

3

您可以使用聚合來排序數據。您必須使用匹配和分組條件進行聚合查詢並展開您的字段。

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