2013-01-08 33 views
2

我一直试图使用带有聚合框架的PHP MongoDB驱动程序在管道进入$组之前过滤几个日期,但匹配没有执行在日期上进行任何过滤,但在字符串和整数上进行过滤时,它可以很好地工作

这里是我的管道阵列和代码:

$date = new DateTime(); 
    $date->sub(new DateInterval('PT' . $hours . 'H')); 
    $mdate = new MongoDate($date->getTimestamp()); 
    $ops = array(
     array('$match') => array(
      'whenField' => array(
       '$gt' => $mdate 
      ) 
     ) 
    ); 

$结果= $这个 - >收藏 - >汇总($ OPS);

这应该返回我收藏中'whenField'在过去3小时内的所有文档,但它会返回我收藏中的每个文档。然后,我可以将'$ gt'切换为'$ lt',并且它还返回集合中的每个文档。我把这个完全相同的匹配数组作为过滤器,并使用find($filter),它正确过滤。日期比较是否与聚合框架$匹配不一致或者我是否犯过某种错误?

回答

3

$ops是错在这里,请尝试:

$ops = array(
    array('$match' => array(
     'whenField' => array(
      '$gt' => $mdate 
     ) 
    ) 
); 

相反

+0

...我无法相信我错过了。谢谢! – Marogian