diff --git a/src/Builder.php b/src/Builder.php index afe49f9..6075f7d 100644 --- a/src/Builder.php +++ b/src/Builder.php @@ -474,8 +474,15 @@ public function multiAggregate($options, $extra) $groups['_id'][$field] = '$' . $field; } - foreach ($aggregate as $fun => $field) { - $groups[$field . '_' . $fun] = ['$' . $fun => '$' . $field]; + // 支持对于一个聚合操作添加多个字段 + foreach ($aggregate as $fun => $fields) { + foreach ($fields as $field) { + if ($fun == 'count') { + $groups[$field . '_count'] = ['$sum' => 1]; + } else { + $groups[$field . '_' . $fun] = ['$' . $fun => '$' . $field]; + } + } } $pipeline = [ ['$match' => (object)$this->parseWhere($options['where'])], diff --git a/src/Query.php b/src/Query.php index e78f9d2..f172673 100644 --- a/src/Query.php +++ b/src/Query.php @@ -494,7 +494,8 @@ public function count() /** * 多聚合操作 * - * @param array $aggregate 聚合指令, 可以聚合多个参数, 如 ['sum' => 'field1', 'avg' => 'field2'] + * @param array $aggregate 聚合指令, 可以聚合多个参数 + * 如 ['sum' => ['field1', 'field2'], 'avg' => ['field2', 'field3']] * @param array $groupBy 类似mysql里面的group字段, 可以传入多个字段, 如 ['field_a', 'field_b', 'field_c'] * @return array 查询结果 */