2015-01-26 4 views
1
{ 
    "GU" : "Person2", 
    "CW" : 2, 
    "Year" : 2015, 
    "_id" : "01" 
}, 
{ 
    "GU" : "Person2", 
    "CW" : 2, 
    "Year" : 2015, 
    "_id" : "02" 
}, 
{ 
    "GU" : "Person1", 
    "CW" : 2, 
    "Year" : 2015, 
    "_id" : "03" 
}, 
{ 
    "GU" : "Person1", 
    "CW" : 3, 
    "Year" : 2015, 
    "_id" : "04" 
}, 
{ 
    "GU" : "Person1", 
    "CW" : 51, 
    "Year" : 2014, 
    "_id" : "05" 
}, 
{ 
    "GU" : "Person1", 
    "CW" : 51, 
    "Year" : 2014, 
    "_id" : "06" 
} 

내 데이터를 집계하여 CW 및 연도별로 그룹화 할 수있는 방법이 있습니까? 주당 다른 사람?MongoDB : 캘린더 주별 및 연도 별 문서 합계

그래서 결국 내 데이터는 다음과 같아야합니다

db.mycol.aggregate([ 
    {$group:{ 
     _id: {Year: "$Year", CW:"$CW", GU: "$GU"}, 
     total:{ 
      $sum:1 
     } 
    }}, 
    {$group:{ 
     _id: {Year: "$_id.Year", CW:"$_id.CW"}, 
     GUs: { $push: { GU: "$_id.GU", total: "$total" } } 
    }}, 
    {$sort: {"_id.Year" : 1, "_id.CW" : 1}} 
]) 

편집 :

{Year: 2014, CW:51, GU:{Person1:2}}, 
{Year: 2015, CW:2, GU:{Person1:1, Person2:2}}, 
{Year: 2015, CW:3, GU:{Person1:1}} 
+0

문서가 이미 클라이언트에 게시 되었습니까, 아니면 서버에서이 작업을 수행하려고합니까? –

+0

집계가 서버에서 수행됩니다. –

답변

0

쉽게 두 번 연속 그룹화하여 그것을 달성 할 수 집계에 정렬을 추가 파이프 라인

그러면 결과는 다음과 같습니다.

{ 
    "result" : [ 
      { 
        "_id" : { 
          "Year" : 2014, 
          "CW" : 51 
        }, 
        "GUs" : [ 
          { 
            "GU" : "Person1", 
            "total" : 2 
          } 
        ] 
      }, 
      { 
        "_id" : { 
          "Year" : 2015, 
          "CW" : 2 
        }, 
        "GUs" : [ 
          { 
            "GU" : "Person1", 
            "total" : 1 
          }, 
          { 
            "GU" : "Person2", 
            "total" : 2 
          } 
        ] 
      }, 
      { 
        "_id" : { 
          "Year" : 2015, 
          "CW" : 3 
        }, 
        "GUs" : [ 
          { 
            "GU" : "Person1", 
            "total" : 1 
          } 
        ] 
      } 
    ], 
    "ok" : 1 
} 
+1

고맙습니다. 그게 정확히 내가 찾고 있던 것이 었습니다. 이미 두 번째 그룹화를 시도했지만 두 번째 그룹의 첫 번째 그룹화 된 항목을 밀어 넣기를 통해 "사용할"수 있다는 것을 알지 못했습니다. 설명/도움이 많이 있습니다. –