2

我一直在尝试使用带有聚合框架的 PHP MongoDB 驱动程序来过滤几个日期,然后再通过管道传输到 $group 中,但是匹配并没有对日期进行任何过滤,但是在过滤字符串和整数时它可以完美地工作.

这是我的管道数组和代码:

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

$results = $this->collection->aggregate($ops);

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

4

1 回答 1

3

这里$ops是错误的,请尝试:

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

反而

于 2013-01-08T13:38:08.620 回答