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。如何将其他字段映射到特定字段。我也无法在互联网上找到解决方案。

最佳答案

您可以尝试在汇总下方获取所需的结果。

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

更新为使用MongoTemplate Fields group变体将字段关键字名称显式映射为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"))
    );

09-27 00:37