2016-10-03 8 views
1

私は以下のフォーマットのコレクションを持っています。Spring MongoDB distict - 完全なドキュメントを取得できません

{ 
id:____, 
name:"Carlos", 
city:"Mumbai" 
}, 
{ 
id:____, 
name:"Pravin", 
city:"Mumbai" 
}, 
{ 
id:_____, 
name:"Gaurav", 
city:"Ahmedabad" 
} 

都市別に文書全体を区別したい。私はdb.collection.distinct( "city")を試しました。しかし、それは異なる都市だけを返す。

電流出力:

["Mumbai","Ahmedabad"] 

予想される出力:あなたの上

{ 
id:____, 
name:"Carlos", 
city:"Mumbai" 
}, 
{ 
id:_____, 
name:"Gaurav", 
city:"Ahmedabad" 
} 

は "ムンバイ" の1つのレコードのみがある見ることができます。私はこの種の出力が必要です。

spring-mongodbではっきりとドキュメント全体をどのように取得できるのでしょうか?

+0

缶上記のサンプル文書では、あなたの予想される結果は何ですか? – chridam

+0

更新していただきありがとうございます。重複した都市が多数あるとします。名前を選択する基準は何ですか。上記のあなたのサンプルで 'name:" Carlos "'を選んだのですが、なぜ 'name:" Pravin "'? – chridam

+0

同じ都市の文書が2つある場合は、その文書を選択する必要があります。私は最初または最後にすることができます。その基準はありません。私はちょうど都市 "ムンバイ"の一つのドキュメントが必要です –

答えて

0

あなたは$first演算子を使用して$groupパイプラインステージ内の他のフィールドを含めることができます集約パイプライン動作を実行してみてください可能性があります。このアプローチを示して二つの例は、次のとおりです。


モンゴシェル:

pipeline = [ 
    { 
     "$group": { 
      "_id": "$city", 
      "id": { "$first": "$_id" }, 
      "name": { "$first": "$name" } 
     } 
    } 
] 

db.collection.aggregate(pipeline); 

春データのMongoDB:

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

MongoTemplate mongoTemplate = repository.getMongoTemplate(); 
Aggregation agg = newAggregation(
    group("city") 
     .first("_id").as("id") 
     .first("name").as("name") 
); 

AggregationResults<OutputType> result = mongoTemplate.aggregate(agg, 
              "collection", OutputType.class); 
List<OutputType> mappedResult = result.getMappedResults(); 

+1

ありがとうございます。これは機能します。 –

関連する問題