我有一个工作的MongoDB聚合查询,我可以通过MongoDB shell运行.但是,我正在尝试将其转换为使用官方PHP Mongo驱动程序(http://PHP.net/manual/en/mongocollection.aggregate.PHP).
这是工作原始的MongoDB查询:
db.executions.aggregate( [
{ $project : { day : { $dayOfYear : "$executed" } } },
{ $group : { _id : { day : "$day" }, n : { $sum : 1 } } } ,
{ $sort : { _id : -1 } } ,
{ $limit : 14 }
] )
这是我使用Mongo驱动程序在PHP中的尝试(不工作):
$result = $c->aggregate(array(
'$project' => array(
'day' => array('$dayOfYear' => '$executed')
),
'$group' => array(
'_id' => array('day' => '$day'),
'n' => array('$sum' => 1)
),
'$sort' => array(
'_id' => 1
),
'$limit' => 14
));
{"errmsg":"exception: wrong type for field (pipeline) 3 != 4","code":13111,"ok":0}
有任何想法吗?谢谢.
解决方法:
Javascript中的参数是一个包含4个对象的数组,每个对象都有一个元素,在PHP中它是一个带有4个元素的关联数组(对象).这将代表您的Javascript:
$result = $c->aggregate(array(
array(
'$project' => array(
'day' => array('$dayOfYear' => '$executed')
),
),
array(
'$group' => array(
'_id' => array('day' => '$day'),
'n' => array('$sum' => 1)
),
),
array(
'$sort' => array(
'_id' => 1
),
),
array(
'$limit' => 14
)
));
此外,如果您至少拥有PHP5.4,则可以使用更简单的数组语法.转换到PHP是微不足道的,你只需用方括号替换花括号,用箭头替换冒号:
$result = $c->aggregate([
[ '$project' => [ 'day' => ['$dayOfYear' => '$executed'] ] ],
[ '$group' => ['_id' => ['day' => '$day'], 'n' => ['$sum' => 1] ] ],
[ '$sort' => ['_id' => 1] ],
[ '$limit' => 14 ]
]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。