2017-05-04 1 views
0
db.test.aggregate(
    [ { 
     $group: 
     { 
      _id: "$id", 
      "total":{$sum: 1}, 
      "live" : { $sum : {$cond : { if: { $eq: ["$status",A"]},then: 1, else: 0}}}, 
      "chat_hrs" :{ $avg: { $subtract: [ "$end_time", "$start_time" ] } }}}]). 

Veuillez m'aider à écrire le codage springmvc pour utiliser l'agrégation mongodb pour la requête ci-dessus.comment utiliser la somme et la condition dans le groupe à l'aide des données printanières agrégation mongodb

+0

S'il vous plaît ajouter ce que vous avez essayé jusqu'à présent au poste. Voici quelques exemples http://docs.spring.io/spring-data/data-mongo/docs/current/reference/html/#mongo.aggregation – Veeram

+0

J'ai essayé code suivant, agrégation agrégation = newAggregation ( \t \t \t \t projet (id », "$ id") \t \t .andExpression ("end_time - start_time"). comme " comme ("AvgTime") \t \t .andExpression ("Status"," A) ("vie") , \t \t \t \t groupe \t ("$ id"). count(). comme ("total") \t \t \t .addToSet ("id"). Comme ("id") \t \t \t .avg ("AvgTime"). (Comme "chat_hrs") \t \t \t .addToSet ("vie"). Comme ("live")); – madhu

+0

Votre requête de printemps est différente de votre requête mongo affichée dans la question. Pouvez-vous s'il vous plaît me montrer la requête réelle? – Veeram

Répondre

1

Vous pouvez utiliser le pipeline d'agrégation ci-dessous.

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*; 
import static org.springframework.data.mongodb.core.aggregation.ArithmeticOperators.*; 
import static org.springframework.data.mongodb.core.aggregation.ConditionalOperators.when; 
import static org.springframework.data.mongodb.core.query.Criteria.where; 

Aggregation aggregation = 
      newAggregation(
       project("id"). 
        and(when(where("status").is("A")).then(1).otherwise(0)).as("status"). 
        and(Subtract.valueOf("end_time").subtract("start_time")).as("diffTime"), 
       group("$id").count().as("total").sum("status").as("live").avg("diffTime").as("chat_hrs")); 

Généré Mongo Requête:

[{ 
    "$project": { 
     "id": 1, 
     "status": { 
      "$cond": { 
       "if": { 
        "$eq": ["$status", "A"] 
       }, 
       "then": 1, 
       "else": 0 
      } 
     }, 
     "diffTime": { 
      "$subtract": ["$end_time", "$start_time"] 
     } 
    } 
}, { 
    "$group": { 
     "_id": "$id", 
     "total": { 
      "$sum": 1 
     }, 
     "live": { 
      "$sum": "$status" 
     }, 
     "chat_hrs": { 
      "$avg": "$diffTime" 
     } 
    } 
}]