2017-06-28 2 views
1

I mit Federdaten mongoDB unter Abfrage verwenden möchten:Mongo Abfrage Federdatenabfrage für die Aggregation geschrieben werden

db.user.aggregate([ 
    {"$sort": {"contactInfo.version": -1}}, 
    {$group:{_id:"$contactInfo.contact", "maxValue": {$max:"$contactInfo.version"}, "userAgg": { "$first": "$$CURRENT" }}}, 
    { $project : { "userAgg" : 1 ,_id : 0 }} 
]); 

Wir haben Benutzerdaten wie folgt aus:

{ 
      "contactInfo": { 
       "version": "00", 
       "contact": "1234567890", 
       "addressLine1": "Street Number 1", 
       "addressLine2": "Newyork", 
       "addressLine3": "US" 
      }, 
      "name": "John Smith", 
      "department": "IT", 
      "skill": "Java", 
      "experience": "4", 
      "workStatus": "Project" 
     } 

ich tue Aggregation wie unten, aber immer Null

Kann jemand mir helfen, die Benutzerdaten für die maximale Version, für die über Abfrage im Frühjahr Daten MongoDB. Added UserAggregation pojo, wie es aussieht, da meine Abfrage mir zurückkehrt Daten wie

{ 
     "userAgg" : { 
      "contactInfo": { 
       "version": "00", 
       "contact": "1234567890", 
       "addressLine1": "Street Number 1", 
       "addressLine2": "Newyork", 
       "addressLine3": "US" 
      }, 
      "name": "John Smith", 
      "department": "IT", 
      "skill": "Java", 
      "experience": "4", 
      "workStatus": "Project" 
     } 
     } 

public class UserAggregation 
{ 
    UserAgg userAgg; 
} 

public class UserAgg 
{ 
    User user; 
} 
+0

Es sieht aus wie Zuordnung zu Pojo nicht funktioniert. Kannst du 'UserAggregate' Pojo zum Beitrag hinzufügen? – Veeram

+0

@Veeram hat das UserAggregate-Pojo hinzugefügt. – RCS

Antwort

2

Der Grund, warum Sie Nullwert haben, weil es kein Feld als user in Ihrer Aggregationsantwort ist.

Vorausgesetzt, dass Ihr User pojo richtig eingerichtet Sie unter Aggregation versuchen können, können Sie Ihr Projekt aktualisieren können, um Ihre pojo Hierarchie dh Karte ("userAgg").as("userAgg.user")

Aggregation agg = newAggregation(
    sort(Sort.Direction.DESC, "contactInfo.version"),   
    group("contactInfo.contact","contactInfo.version"). 
     max("contactInfo.version").as("userCurrentInfo").first("$$CURRENT").as("userAgg"), 
    project().and("userAgg").as("userAgg.user") 
); 

List<UserAggregate> groupResults = mongoOperations.aggregate(agg, "userDB", UserAggregate.class).getMappedResults(); 

Umgestalten Version anzupassen:

Sie können ganz aktualisieren ein paar Dinge hier, wie Entfernen der UserAggregate, UserAgg pojo und Karte direkt auf User und vereinfachen Aggregation Abfrage zu entfernen max Operator, contactInfo.version Gruppierungsschlüssel und nurverwendenmit $$ROOT, um das max versioned Dokument auf den sortierten Daten zu erhalten.

Aggregation agg = newAggregation(
     sort(Sort.Direction.DESC, "contactInfo.version"), 
     group("contactInfo.contact").first("$$ROOT").as("user"), 
     project("user").andExclude("_id") 
); 

List<User> groupResults = mongoOperations.aggregate(agg, User.class, User.class).getMappedResults();