2016-06-01 2 views
1

내 MongoDB를 수집 다음 구조를 가지고와 MongoDB를 집계 : 나는 세션의 수를 얻을 필요가많은 임베디드 문서

{ 
    "_id": "1", 
    "sessions": [ 
    { 
     "type": "default", 
     "pageViews": [ 
     { 
      "path": "/", 
      "host": "example.com", 
      "events": [ 
      { 
       "name": "event1" 
      }, 
      { 
       "name": "event1" 
      } 
      ] 
     } 
     ] 
    }, 
    { 
     "type": "default", 
     "pageViews": [ 
     { 
      "path": "/", 
      "host": "example.com", 
      "events": [ 
      { 
       "name": "event1" 
      }, 
      { 
       "name": "event1" 
      } 
      ] 
     } 
     ] 
    } 
    ] 
} 

를, 페이지 뷰 및 _id 필드 하나 개 쿼리 그룹의 이벤트.

내가 할 :

db.collection.aggregate([ 

    { 
     $unwind: "$sessions" 
    }, 

    { 
     $unwind: "$sessions.pageViews" 
    }, 

    { 
     $group: { 
      _id : "$_id", 
      totalEvents: { 
       $sum: { 
        $size: "$sessions.pageViews.events" 
       }, 
      }, 
      totalPageViews: { 
       $sum: 1 
      } 
     } 
    } 

]) 

하지만 세션의 수를 얻는 방법을 이해할 수 없습니다.

이 쿼리에서 세션 수를 얻으려면 어떻게해야합니까?

감사합니다.

답변

2

$ project (mongodb 3.2에서 사용 가능)를 사용하여 풀기 전에 세션을 세어보십시오. 총 세션은 $group 단계에서 사용할 수 있습니다. 동일한 _id를 가진 모든 레코드가 동일한 세션 수를 갖기 때문에 각 _id에 대해 $first totalSessions를 가져갈 수 있습니다.

db.collection.aggregate([ 

    { $project : { sessions: 1, totalSessions : { $size : "$sessions" } } }, 

    { 
     $unwind: "$sessions" 
    }, 

    { 
     $unwind: "$sessions.pageViews" 
    }, 

    { 
     $group: { 
      _id : "$_id", 
      totalSessions: { $first : "$totalSessions" }, 
      totalEvents: { 
       $sum: { 
        $size: "$sessions.pageViews.events" 
       }, 
      }, 
      totalPageViews: { 
       $sum: 1 
      } 
     } 
    } 
]) 
+0

감사합니다! 맞습니다. – LastRide

+0

http://stackoverflow.com/q/42212397/5230740에서 도와주세요. –