2016-06-01 6 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. Вы можете просто взять $first totalSessions для каждого _id, как все записи с одинаковыми _id будут иметь одинаковое количество сеансов:

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. –

Смежные вопросы