2017-04-05 9 views
0
Aggregation aggregation = newAggregation(
    group("$meta_data.user_data.first_name", "$meta_data.user_data.last_name", "$meta_data.user_data.profile_pic", "$user_id") 
); 
AggregationResults<UsersMongoResult> groupResults = mongoTemplate.aggregate(aggregation, "chatuser_log", UsersMongoResult.class); 

public class UsersMongoResult { 
     private String first_name; 
     private String last_name; 
     private String profile_pic; 
     private String user_id; 
    } 

私は結果をpojoクラスのみのuser_idにマップしました。他のフィールドを特定のフィールドにどのようにマッピングするのですか?私はインターネットでも解決策を見つけることができませんでした。集計結果をjava pojoにマップする方法

答えて

1

以下の集計を試して、目的の結果を得ることができます。

デフォルトでは、フィールド名の一部をキー名として使用します。たとえば、user_data.first_namemeta_data.user_data.first_nameのキー名となり、マッピングが失敗する理由です。

MongoTemplateFieldsgroupバリエーションを使用して、フィールドキー名をspringのJavaクラスフィールド名として明示的にマップして正しくマップすることができます。

Aggregation aggregation = newAggregation(
      group(Fields.fields().and("first_name", "meta_data.user_data.first_name").and("last_name","meta_data.user_data.last_name").and("profile_pic", "meta_data.user_data.profile_pic").and("user_id", "user_id")) 
    ); 
+0

私はあなたのオプションを試してみましたが、私は$のproject' 'でそれらを上書きしようとした前にまだnull値は –

+0

申し訳ありませんが、キーは既に$のgroup'段階'にマッピングされたばかり。グループ分けの段階で同様のコードを使用するように変更されました。今すぐお試しいただけますか? – Veeram

+0

ありがとうございます。それは働いている –

関連する問題