言归正传,我目前正在使用 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();
}