2017-04-05 79 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

您可以尝试下面的聚合来获得所需的结果。

Spring默认使用部分字段名作为键名。例如,user_data.first_name将是meta_data.user_data.first_name的关键名称,也是映射失败的原因。

更新使用MongoTemplateFieldsgroup变体将字段键名显式映射为java类Spring字段的名称以便正确映射它们。

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

我想你的选项,但仍然得到空值 –

+0

对不起,键已经映射到'$ group'阶段之前,我试图重写它们在'$ project'。现在改为在分组阶段使用类似的代码。你现在可以试试吗? – Veeram

+0

谢谢。它正在工作 –