Javascript MongoDB与PHP的聚合
我正在尝试使用PHP执行MongoDB聚合查询 基本上,我得到了下面的查询,当使用MongoDB Shell时,它执行起来没有问题:Javascript MongoDB与PHP的聚合,javascript,php,mongodb,aggregation-framework,Javascript,Php,Mongodb,Aggregation Framework,我正在尝试使用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'
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的aggregate()
方法后不会返回响应:
有人能帮我把上面的查询翻译成它的PHP等价物吗?我有以下信息,但也许我遗漏了什么:
$start = new \MongoDB\BSON\UTCDateTime(strtotime('2017-01-20T00:00:00-02:00'));
$end = new \MongoDB\BSON\UTCDateTime(strtotime('2017-01-29T00:00:00-02:00'));
$regex = new \MongoDB\BSON\Regex('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');