2014-07-22 4 views
2

저는 MongoDB를 처음 접했고 원하는대로 쿼리를 가져 오는 데 문제가있었습니다. 문서에는 특정 시간에 발생한 "오류"가 포함되어 있습니다. 쿼리에서 원하는 결과는 사용자 당 매월 오류 수가 계산됩니다. 이것은 이미 알아 냈지만 추가적으로 사용자 당 총 오류 수를 원합니다.집계 쿼리의 합계 배열

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" } } }, 
      } 
     } 

])

이 결과는 다음과 같습니다 :

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

그것을 추가하여 내가 원하는 것을 얻을 수있을 것

은 내가 지금까지있어 무엇인가 그 쿼리? 당신이 필요로하는

답변

0

모두에 추가 $sum 당신의 두 번째 $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" } 
     }} 
]) 

당신은 같은 _id하고 "아래에 여분의 필드와 당신이 거기에 필요하지 않은 몇 가지 추가 문서 수준을 가지고 오류 ""집합 "그룹화 생산. 이 출력은 추가 수준이 없으면 약간 다릅니다.

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

감사합니다. –