public function group($keys, array $initial, $reduce, array $condition = [])
{
if (is_string($reduce)) {
$reduce = new MongoCode($reduce);
}
$command = ['group' => ['ns' => $this->name, '$reduce' => (string) $reduce, 'initial' => $initial, 'cond' => $condition]];
if ($keys instanceof MongoCode) {
$command['group']['$keyf'] = (string) $keys;
} else {
$command['group']['key'] = $keys;
}
if (array_key_exists('condition', $condition)) {
$command['group']['cond'] = $condition['condition'];
}
if (array_key_exists('finalize', $condition)) {
if ($condition['finalize'] instanceof MongoCode) {
$condition['finalize'] = (string) $condition['finalize'];
}
$command['group']['finalize'] = $condition['finalize'];
}
return $this->db->command($command);
}