2016-04-08 8 views
1

MongoDBにオブジェクトのコレクションがあり、Spring Data MongoDBを使用しています。Springデータの属性値ごとに1項目を選択します。MongoRepository

エンティティの私のコレクションのようなものを見て:私は、各個別のIDの1つのオブジェクトのみを持つようにしたいオブジェクトのリストを取得したい

-------------------------------------------- 
| id  | snapshot  | name   | 
-------------------------------------------- 
| 2   | somedate  | bla   | 
| 2   | somedate  | foo   | 
| 3   | somedate  | bar   | 
| 3   | somedate  | cheese  | 
| 6   | somedate  | milk   | 
| 6   | somedate  | lorum  | 
| 6   | somedate  | ipsum  | 
| 9   | somedate  | do   | 
| 10  | somedate  | re   | 
| 10  | somedate  | mi   | 
| 15  | somedate  | fa   |  
-------------------------------------------- 

を、そのIDのオブジェクトは、1つでなければなりません最新の日付で。

-------------------------------------------- 
| id  | snapshot  | name   | 
-------------------------------------------- 
| 2   | somedate  | bla   | 
| 3   | somedate  | bar   | 
| 6   | somedate  | milk   | 
| 9   | somedate  | do   | 
| 10  | somedate  | mi   | 
| 15  | somedate  | fa   |  
-------------------------------------------- 

MongoRepositoryクエリを使用して、このことが可能です:

私の結果はこのようなものでなければなりませんか? 助けていただければ幸いです。

答えて

1

集約フレームワークで可能です。

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*; 

TypedAggregation<Entity> aggregation = newAggregation(Entity.class, 
    sort(DESC, "snapshot"), 
    group("id") 
     .first("snapshot").as("snapshot") 
     .first("name").as("name") 
); 

AggregationResults<EntityStats> result = mongoTemplate.aggregate(aggregation, EntityStats.class); 
:上記ネイティブ凝集操作は、次にように、ばねデータMongoDBの集合に変換することができる

db.collection.aggregate([ 
    { "$sort": { "snapshot": -1 } }, 
    { 
     "$group": { 
      "_id": "$id", 
      "snapshot": { "$first": "$snapshot" }, 
      "name": { "$first": "$name" } 
     } 
    } 
]) 

:所望の結果を得るために、次の集計操作を実行

関連する問題