使用mongoDB和PHP在Aggregate中使用日期比较

时间:2016-06-20 07:34:55

标签: php mongodb

我在mongoDB中创建了带有日期比较的查询,但是工作正常 但是当我在PHP数组中转换该查询并在聚合方法中执行时,它不会响应任何数据。

以下是用PHP转换的mongoDB查询

RewriteEngine on

RewriteRule ^targi/get/[0-9]+/?$ http://www.myurl.com/artykuly/1?q=&kat=wydarzenia [L,R,NC]

当我在聚合中传递$ pipeline时

 $dateStart = new MongoDate(strtotime("2016-06-08T18:30:00.000+0000"));

$pipeline = array(
    array('$match' => array(
        'EventTS' => array(
            '$gte' => $dateStart
         )
    ))
);

有时它会响应空记录,有时它会响应以下错误消息

$t = $collection->aggregate($pipeline);

看来我的查询是正确的,但我无法确定究竟是什么问题

2 个答案:

答案 0 :(得分:1)

Your Query is perfect but as per mongodb define your document size more than 16 MB means your single row which is greater than 16 MB.

    For resolve this issue you need to use $project in aggregation that migh be solve these issue.
    Eg.

    $pipeline = array(
        array('$match' => array(
            'EventTS' => array(
                '$gte' => $dateStart
             )
        )),
        array('$project' => array('<field>'=>' <1 or true>'))
    );

OR you can use FINDALL

find(array('EventTS' => array( '$gte' => $dateStart )))

答案 1 :(得分:1)

根据上述说明,您只需要获取日期时间大于特定日期时间的所有文档。

可以使用MongoDB的查找操作轻松完成。

在我们需要对数据组执行某些计算的情况下,聚合非常有用。

请尝试执行以下代码段

$date = new MongoDate(strtotime("2016-06-08T18:30:00.000+0000"));
$filter=array('EventTS'=>array('$gte'=>$date));
$data=$collection->find($filter);