MongoDB aggregate with PHP



我正在尝试使用PHP执行MongoDB聚合查询。

基本上,我得到了下面的查询,并且在使用MongoDB Shell时执行没有问题:

db.getCollection('frete').aggregate([
    {$match : {
        '$and': [
            { 'data_UTC': {$gte: ISODate('2017-01-20T00:00:00-02:00'), $lt: ISODate('2017-01-29T00:00:00-02:00') } },
            { 'carga': { $regex : new RegExp('soja', "i") }}
        ]
    }
    },
    {$group : {_id: { $dateToString: { format: "%Y-%m-%d", date: { $subtract: ['$data_UTC', 1000 * 60 * 60 * 2] } } }, qtd_acessos: {$sum:1} }},
    { $sort: { _id: -1 } },
    { $limit: 50}
])

但是,当我尝试通过 PHP 执行相同的查询时(我的composer.json正在使用"mongodb/mongodb": "^1.0.0"依赖项(,调用 MongoDB PHP's aggregate() 方法后不会返回任何响应:

有人可以帮我把上面的查询翻译成它的PHP等效物吗?我有以下内容,但也许我错过了一些东西:

$start = new MongoDBBSONUTCDateTime(strtotime('2017-01-20T00:00:00-02:00'));
$end = new MongoDBBSONUTCDateTime(strtotime('2017-01-29T00:00:00-02:00'));
$regex = new MongoDBBSONRegex('soja', 'i');
$filter = [
    ['$match' => [
            '$and' => [
                ['data_UTC' => ['$gte' => $start, '$lt' => $end]],
                ['carga' => ['$regex' => $regex]]
            ]
        ]
    ],
    ['$group' => ['_id' => ['$dateToString' => ['format' => "%Y-%m-%d", 'date' => ['$subtract' => ['$data_UTC', 1000 * 60 * 60 * 2]]]], 'qtd_acessos' => ['$sum' => 1]]],
    ['$sort' => ['_id' => -1]],
    ['$limit' => 50]
];

谢谢!

与MongoDB标准库的检查将适合您。

 $pipeline = array(
                    array('$match' => 
                                    array('$and' =>
                                            array(  array('data_UTC' => array('$gte' => new MongoDate(strtotime('2017-01-20T00:00:00-02:00')), $lt: new MongoDate(strtotime('2017-01-20T00:00:00-02:00')))),
                                                    array('carga' => array($regex => new MongoRegex("/soja$/i")))
                                                )
                                        )
                        ),
                    array('$group' =>   array ('_id' => array('$dateToString' => array('format' => "%Y-%m-%d", 'date' => array('$subtract' => array('$data_UTC', 1000 * 60 * 60 * 2)))),
                                                     'qtd_acessos' => array('$sum' => 1 ) ),
                                        array('$sort' => array(_id => -1)),
                                        array('$limit' => 50)
                        )
                )
    $this->mongodb->aggregate($pipeline, 'db_collection_name');

最新更新