让我谈谈这一点,我目前正在使用Doctrine MongoDB ODM与Symfony2一起将数据保存到MongoDB中。
目前我正在按type
对结果进行分组,但我也希望按MAX(group_id)
对其进行分组。
当然我可以改变reduce函数,但是我试图在查询完成后避开大型返回数组和更多处理,所以我想知道是否有比这个特定问题更优雅的解决方案
监控文件,
/**
* @ODM\Document(collection="monitoring")
*/
class Monitoring
{
/** @ODM\Id */
public $id;
/** @ODM\String */
public $type;
/** @ODM\String */
public $message;
/** @ODM\Int */
public $groupId;
.... getters and setter etc ....
}
MonitoringManager函数以获取所有项目,
public function getAllMonitoringItems(){
return $this->dm->createQueryBuilder('MonitoringBundle:Monitoring')
->group(array(), array('groups' => array()))
->reduce('function (obj, prev) {
var type = obj.type;
if(!prev.groups.hasOwnProperty(type)){
prev["groups"][type] = [];
prev["groups"][type].push(obj);
} else {
prev["groups"][type].push(obj);
}
}')
->field('type')->notIn(array("graph"))
->getQuery()
->execute()
->toArray();
}