2017-04-05 1 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; 
    } 

lorsque j'ai mappé les résultats à la classe pojo uniquement id_utilisateur mappé. Comment mapper d'autres champs à des champs particuliers? J'étais incapable de trouver une solution sur internet aussi.Comment mapper les résultats agrégés à java pojo

Répondre

1

Vous pouvez essayer d'agréger ci-dessous pour obtenir le résultat souhaité. Par défaut, Spring utilise une partie du nom de champ comme nom de clé. Par exemple user_data.first_name sera le nom de clé pour meta_data.user_data.first_name et est la raison pour laquelle le mappage échoue.

Mise à jour pour utiliser MongoTemplateFieldsgroup variante pour mapper explicitement les noms de clé de champ en tant que noms de champs de classe java pour que le mappage leur soit appliqué correctement.

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

J'ai essayé votre option mais toujours obtenir des valeurs nulles –

+0

Désolé, les clés ont déjà été mises en correspondance dans '$ étape de group' avant essayé de les remplacer dans' project' de $. Donc changé maintenant pour utiliser le code similaire dans la phase de regroupement. Pouvez-vous essayer maintenant? – Veeram

+0

Merci. Ça marche –