2016-09-12 1 views

Répondre

2

Voici l'exemple de code pour la requête mentionné dans la question.

Veuillez modifier getMongoConnection() avec votre façon d'obtenir l'objet mongoOperations. Je viens d'ajouter mon code en bas pour votre référence.

public Boolean getOrderGiftCardCount(Integer quantity) { 

     MongoOperations mongoOperations = getMongoConnection(); 

     MatchOperation match = new MatchOperation(Criteria.where("quantity").gt(quantity)); 
     GroupOperation group = Aggregation.group("giftCard").sum("giftCard").as("count"); 

     Aggregation aggregate = Aggregation.newAggregation(match, group); 

     AggregationResults<Order> orderAggregate = mongoOperations.aggregate(aggregate, 
       "order", Order.class); 

     if (orderAggregate != null) { 
      System.out.println("Output ====>" + orderAggregate.getRawResults().get("result")); 
      System.out.println("Output ====>" + orderAggregate.getRawResults().toMap()); 
     } 

     return true; 

    } 

Ma méthode de connexion de référence: -

public MongoOperations getMongoConnection() { 

     return (MongoOperations) new AnnotationConfigApplicationContext(SpringMongoConfig.class) 
       .getBean("mongoTemplate"); 
    } 

version données Spring utilisé: -

<dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb</artifactId> 
     <version>1.9.1.RELEASE</version> 
    </dependency> 

Exemple de sortie: -

Output ====>[ { "_id" : 2.0 , "count" : 2.0} , { "_id" : 1.0 , "count" : 2.0}] 
1

L'opération d'agrégation suivante est un équivalent de données MongoDB Spring:

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*; 

Aggregation agg = newAggregation(
    match(where("quantity").gt(1)), 
    group("giftCard").count().as("count") 
); 

AggregationResults<OrderCount> results = mongoTemplate.aggregate(
    agg, "order", OrderCount.class 
); 
List<OrderCount> orderCount = results.getMappedResults();