2017-06-02 1 views
0

Je suis en train d'obtenir requête suivante à partir du printemps de données Mongo agrégation:Comment écrire seul champ sous id au printemps agrégation mongodb

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

J'ai essayé suivante:

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

Mais il génère cette expression où il n'y a pas de sous-champ "année" sous le champ "_id":

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

Toutes les idées sur la façon d'obtenir q uer utilisant l'agrégation de données de printemps mongodb?

Répondre

0

Je ne vois aucun crochet dans l'API pour accéder à la valeur précédente _id.

Vous pouvez utiliser AggregationOperation pour créer une scène $group en utilisant des types mongodb.

Quelque chose comme

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

Comme vous l'avez dit, il semble y avoir aucun moyen de le faire dans le plus pur mongodb de données de printemps. Votre solution de contournement fonctionne. – Tanrikut