Я пытаюсь группировать «group_name» и выбирать поля «имя_группы» и «group_id» с помощью php-драйвера с использованием структуры агрегации:
Array ( [$project] => Array ( [group_name] => 1 [group_id] => 1 ) [$group] => Array ( [_id] => $group_name [total_sum] => Array ( [$sum] => 1 ) ) )
Я получаю следующее: [errmsg] => exception: A pipeline stage specification object must contain exactly one field.
Однако, когда я использую только оператор $project
или $group
он работает отлично.
Проблема заключается в том, что вы группируете свои $ project и $ group вместе.
Ваш массив должен выглядеть больше
{ $project: { group_name: 1, group_id: 1 }, }, { $group:{ _id:{ group_name:'$group_name', }, total_sum:{$sum:1} } }
Вам нужно будет переформатировать, а также использовать запятые в качестве разделителей. Это конвейер, поэтому он принимает каждый элемент за раз.
Я не пробовал это, но попробую:
array ( array( array( '$project' => array( "group_name" => 1, "group_id" => 1, ) ), array( '$group' => array( "_id" => array("group_name" => '$group_name'), "total_sum" => array('$sum' => 1), ), ) )