要点を言えば、私は現在、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();
}