douqian1835 2013-10-26 02:09
浏览 24
已采纳

如何使用Mongo聚合获取每组天的总“页面浏览量”

I have tried for a few days now to come up with a working aggregate but I'm just not getting it.

I have a collection that looks similar to the following.

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

What I'm trying to do is get a total number of views for each day so I can display a list of dates (from "views") and the total for those days.

Can someone show me how this can be done?

Thank you

Edit - Below Code Works Correctly Here is the php code for the solution provided in case it helps someone else:

$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条回答 默认 最新

  • duansha6410 2013-10-26 03:55
    关注

    This should do the trick.

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

    If you want total number of views per day for collection replace group phase with this one:

    {$group: {_id: "$date", views: {$sum: 1}}}
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题