php中mongodb如何分组查询请平均数和总和?
网友回复
使用aggregate,结合group及max min sum,具体代码如下:
<?php $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017"); // 插入数据 $bulk = new MongoDB\Driver\BulkWrite; $bulk->insert(['x' => 2, 'name' =>'bfw','scores'=>123]); $bulk->insert(['x' => 2, 'name' =>'google','scores'=>10]); $bulk->insert(['x' => 2, 'name' =>'baidu','scores'=>11]); $bulk->insert(['x' => 2, 'name' =>'bfw','scores'=>200]); $_data=$manager->executeBulkWrite('test.sites2', $bulk); $param = [ 'aggregate' => 'sites2', //表名 'pipeline' => [ ['$match' => ['x' => 2]], ['$group' => ['_id' => '$name', 'avg' => ['$avg' => '$scores'], 'count' => ['$sum' => 1]]], ], 'cursor' => new \stdClass()// 高版本需要带上这个值 ]; //除了$sum外还有$max最大值 $min最小值 $avg平均值 $command = new \MongoDB\Driver\Command($param); $cursor = $manager->executeCommand('test', $command); foreach ($cursor as $document) { $document = objectToArray($document); var_dump($document); } function objectToArray($object){ $result = array(); $object = is_object($object) ? get_object_vars($object) : $object; foreach ($object as $key => $val) { $val = (is_object($val) || is_array($val)) ? objectToArray($val) : $val; $result[$key] = $val; } return $result; }