2014-07-22 2 views
2

Je suis assez nouveau à MongoDB, et avoir quelques problèmes pour obtenir ma requête comme je le veux. Les documents contiennent des "erreurs" qui se sont produites à un moment précis. Le résultat que je veux de la requête est un nombre d'erreurs pour chaque mois par utilisateur. Cela je l'ai déjà compris, mais en plus je veux le nombre total d'erreurs par utilisateur.Sum somme dans la requête d'agrégation

C'est ce que j'ai jusqu'à présent:

db.Logger.aggregate([ 
     { "$group": { 
      "_id": { 
       "name": "$name", 
       "month": { "$month": "$errorTime" } 
      }, 
      "totalErrors": { "$sum": 1 } 
     }}, 
     { $group : 
      { _id: { name : "$_id.name"}, 
       errors: { $addToSet: { totalErrors: { errorsThisMonth: "$totalErrors", currentMonth : "$_id.month" } } }, 
      } 
     } 

])

Le résultat est:

{ 
     "_id" : { 
      "name" : "abhos" 
     }, 
     "errors" : [ 
      { 
       "totalErrors" : { 
        "errorsThisMonth" : 6, 
        "currentMonth" : 2 
       } 
      }, 
      { 
       "totalErrors" : { 
        "errorsThisMonth" : 6, 
        "currentMonth" : 1 
       } 
      } 
     ] 
    }, 

aura-t-il possible d'obtenir ce que je veux en y ajoutant cette requête?

Répondre

0

Tout ce que vous avez besoin est un $sum supplémentaire dans votre deuxième $group:

db.Logger.aggregate([ 
     { "$group": { 
      "_id": { 
       "name": "$name", 
       "month": { "$month": "$errorTime" } 
      }, 
      "totalErrors": { "$sum": 1 } 
     }}, 
     { "$group": { 
      "_id": "$_id.name", 
      "errors": { 
       "$addToSet": { 
        "errorsThisMonth": "$totalErrors", 
        "currentMonth" : "$_id.month" 
       } 
      }, 
      "totalErrors": { "$sum": "$totalErrors" } 
     }} 
]) 

Aussi, vous avez quelques niveaux supplémentaires de document que vous n'avez pas besoin là-bas, comme des champs supplémentaires sous la _id et la " les erreurs "" set "produites dans le groupement. Cette sortie est juste un peu différente sans ces niveaux supplémentaires:

{ 
     "_id": "abhos" 
     "errors" : [ 
      { 
       "errorsThisMonth" : 6, 
       "currentMonth" : 2 
      }, 
      { 
       "errorsThisMonth" : 6, 
       "currentMonth" : 1 
      } 
     ], 
     "totalErrors": 12 
    }, 
+0

Merci, a parfaitement fonctionné! –