2013-10-26 3 views
-1

Я попытался в течение нескольких дней, чтобы создать рабочий агрегат, но я просто не получаю его.Как мне использовать агрегацию Mongo, чтобы получить общее количество просмотров страниц за каждую группу дней.

У меня есть коллекция, которая похожа на следующее.

_id: ObjectId("52672ca368a56f481d000045"), 
totalviews: 5, 
views: [ 
    {date: ISODate("2013-10-23T01:55:47Z") }, 
    {date: ISODate("2013-10-23T01:55:50Z") }, 
    {date: ISODate("2013-10-23T23:31:08Z")}, 
    {etc.} 
] 

То, что я пытаюсь сделать, это получить общее число просмотров за каждый день, так что я могу отобразить список дат (от «мнения») и общего для этих дней.

Может ли кто-нибудь показать мне, как это можно сделать?

Спасибо

Edit - ниже код работает правильно Вот PHP код для решения при условии, если это помогает кто-то еще:

$ops = array(
array('$unwind' => '$views'), 
array('$project' => array('date'=>array(
    'day'=>array('$dayOfMonth'=>'$views.date'), 
    'month'=>array('$month'=>'$views.date'), 
    'year'=>array('$year'=>'$views.date')) 
)), 
array('$group'=>array('_id'=>'$date','views'=>array('$sum'=>1))) 
); 

$data = $collection->aggregate($ops); 
+1

Просьба представить пример ввода и ожидаемых результатов. Прямо сейчас ваш вопрос непонятен. Вы хотите просматривать по дням за каждый документ или просмотры в день на коллекцию? Вы также должны показать, что вы пробовали до сих пор. – zero323

ответ

0

Это должно сделать трюк.

db.foo.aggregate(
    {$unwind: "$views"},  
    {$project: {date: { 
     day: {$dayOfMonth: "$views.date"}, 
     month: {$month: "$views.date"}, 
     year: {$year: "$views.date"}, 
    }}}, 
    {$group: {_id: {id: "$_id", date: "$date"}, views: {$sum: 1}}} 
) 

Если вы хотите общее количество просмотров в день сбора заменить групповой этап с этим:

{$group: {_id: "$date", views: {$sum: 1}}} 
+0

Спасибо, что сработало. Мне не хватало, как правильно расставить дату. – pyrosz

+0

Если это помогло вам, пожалуйста, отметьте это как ответ. – azz0r

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