2016-06-01 16 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フィールドで1つのクエリグループでのセッション、ページビューやイベントの数を取得する必要があります。

は私が行います

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で助けてください。 –