2017-06-02 2 views
0

Ich versuche zu bekommen folgende Abfrage von Spring Data Mongo Aggregation schreiben:Wie einzelne Unter ID-Feld im Frühjahr mongodb Aggregation

{ 
    "_id": { 
    "year": "$_id.year" 
    }, 
    "result": { 
    "$push": { 
     "rs": "$_id.rs", 
     "vl": "$vl" 
    } 
    } 
} 

Ich habe versucht folgende:

GroupAggregation as = group("_id.year").push(new BasicDBObject("rs", "$_id.rs").append("vl", "$vl")).as("result"); 

Aber es erzeugt diesen Ausdruck wo es kein Unterfeld „Jahr“ unter „_id“ Feld:

{ "$group" : { "_id" : "$_id.year" , "result" : { "$push" : { "rs" : "$_id.rs" , "vl" : "$vl"}}}} 

Irgendwelche Ideen auf, wie man die q erhalten Verwenden Sie Federdaten mongodb Aggregation?

Antwort

0

Ich sehe keinen Haken in der api den vorherigen _id Wert zuzugreifen.

Sie können AggregationOperation verwenden, um $group Bühne mit Mongodb-Typen zu erstellen.

So etwas wie

AggregationOperation group = new AggregationOperation() { 
     @Override 
     public DBObject toDBObject(AggregationOperationContext aggregationOperationContext) { 
      return new BasicDBObject("$group", new BasicDBObject("_id", new BasicDBObject("year", "$_id.year")).append("result", new BasicDBObject("$push", new BasicDBObject("rs", "$_id.rs").append("vl", "$vl")))); 
    } 
}; 
+0

Wie Sie gesagt haben, scheint es keinen Weg, um es in reinem Quelldaten mongodb zu tun. Ihre Problemumgehung funktioniert. – Tanrikut