2017-02-24 80 views
1

我有一个MySQL查询,需要转换成最新版本的驱动程序\管理器mongodb.so使用php executeCommand或executeQuery mongodb。匹配和按日期分组

SELECT created_time, count(id) AS total 
FROM `tweets` 
WHERE created_time >= (NOW() - INTERVAL 10 DAY) AND active = 1 
GROUP BY DATE(created_time) 

到目前为止已经试过是:

$manager = new MongoDB\Driver\Manager("mongodb://".$_SERVER['HTTP_HOST'].":27017"); 
    $cond = [ 'created_time' => ['$gte' => '(NOW() - INTERVAL 10 DAY'], 'active' => 1 ]; 
    $command = new MongoDB\Driver\Command([ 
     'aggregate' => 'collection_name', 
     'pipeline' => [ 
      ['$match' => $cond], 
      ['$group' => ['_id' => '$created_time', 'total' => ['$sum' => '$_id']]], 
     ], 
     'cursor' => new stdClass, 
    ]); 
    $cursor = $manager->executeCommand('db_name', $command); 
    $result = array(); 
    foreach ($cursor as $document) { 
     $result[] = $document; 
    } 
+1

如果您可以添加您迄今为止尝试过的方法,那将会很不错。 – Veeram

+0

好吧,我已经更新了我迄今为止尝试过的代码。 –

回答

0

你接近。

更新您的$cond以下。休息看起来很好。

$date = new DateTime(); 
$date->sub(new DateInterval('P10D')); 
$cond = [ 'created_time' => ['$gte' => $date], 'active' => 1 ];    

更新分组键_id只包含日期部分。

['$dateToString' => ['format' => "%Y-%m-%d", 'date' => '$created_time']] 
+0

谢谢,但我需要替换下面的mysql查询。在由$ created_time组是由包含日期时间的数据库字段,但我需要没有时间的日期组。 SELECT created_time,count(id)AS total FROM tweets WHERE created_time> =(NOW() - INTERVAL 10 DAY)AND active = 1 GROUP BY DATE(created_time) –

+0

已更新的回答。 – Veeram

+0

我这样做: ['$ group'=> ['_id'=> ['$ dateToString'=> ['format'=>“%Y-%m-%d”,'date'=>' $ created_time']],'total'=> ['$ sum'=>'$ _id']]], 但出错: 致命错误:未捕获异常'MongoDB \ Driver \ Exception \ RuntimeException'消息'不能 从BSON类型字符串转换为日期' –