【问题标题】:How do I using Mongo aggregation to get the total "page views" for each group of days如何使用 Mongo 聚合来获取每组天的总“页面浏览量”
【发布时间】:2013-10-26 02:09:06
【问题描述】:

我已经尝试了几天来提出一个有效的聚合,但我就是没有得到它。

我有一个类似于以下内容的集合。

_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.}
]

我要做的是获取每天的总观看次数,这样我就可以显示日期列表(来自“观看次数”)和那些天的总数。

谁能告诉我如何做到这一点?

谢谢

编辑 - 下面的代码工作正常 以下是提供的解决方案的 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);

【问题讨论】:

  • 请提供示例输入和预期输出。现在你的问题还不清楚。您想要每个文档的每日视图还是每个集合的每日视图?您还应该展示到目前为止您尝试过的内容。

标签: php mongodb mongodb-php database


【解决方案1】:

这应该可以解决问题。

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}}}

【讨论】:

  • 谢谢你,成功了。我错过了如何正确分解日期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
相关资源
最近更新 更多