2017-09-11 2 views
0

J'essaie d'effectuer une agrégation mongodb en utilisant Java et incapable de comprendre comment faire la somme de 2 champs individuellement. Ci-dessous ma structure de document:Java MongoDB agrégation - somme de plusieurs champs

{ 
    "_id" : ObjectId("59b6b96423b65d0a04de128d"), 
    "itemCount": 25, 
    "defectiveItemCount": 5, 
    "time": ISODate("x") 
}, 
{ 
    "_id" : ObjectId("59b6b96423b65d0a04de128d"), 
    "itemCount": 20, 
    "defectiveItemCount": 7, 
    "time": ISODate("x") 
} 

J'essaie de résumer en utilisant:

Aggregation pipeline = newAggregation(
     match(Criteria.where("time").gt(time)), 
     group().sum("itemCount").as("total"), 
     group().sum("defectiveItemCount").as("defective"), 
     project("total").and("defective").previousOperation() 
); 

J'ai aussi essayé:

Aggregation pipeline = newAggregation(
     match(Criteria.where("time").gt(time)), 
     group().sum("itemCount").as("total").sum("defectiveItemCount").as("defective"), 
     project("total").and("defective").previousOperation() 
); 

Quand je lance cette agrégation, le résultat de défectueux est toujours NUL.

Je veux le résultat que:

{ 
    "itemCount": 45, 
    "defectiveItemCount": 12 
} 

Est-ce possible ou dois-je effectuer au-dessus de 2 agrégations distincts?

Répondre

1

Vous devez ajouter les accumulateurs dans le groupe.

Quelque chose comme

Aggregation pipeline = newAggregation(
    match(Criteria.where("time").gt(time)), 
    group().sum("itemCount").as("total").sum("defectiveItemCount").as("defective"), 
    project("total","defective") 
);