2

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

}
4

0 回答 0