2013-04-01 2 views
1

Я пытаюсь группе «GROUP_NAME» и выберите полей «GROUP_NAME» и «group_id» с водителем PHP с использованием базы агрегации:группы и проектные операторы MongoDB

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, оператор работает отлично.

+0

Comma отдельно? http://php.net/manual/en/mongocollection.aggregate.php –

+0

Я использую запятую в коде. Это просто результат. Является ли моя структура правильной? – castt

ответ

4

Проблема заключается ваша группировка вашего проекта и $ $ группы вместе.

Ваш массив должен выглядеть как

{ 
    $project: { 
    group_name: 1, 
    group_id: 1 
    }, 
}, 
{ 
    $group:{ 
    _id:{ 
     group_name:'$group_name', 
    }, 
    total_sum:{$sum:1} 
    } 
}  
0

Вам необходимо переформатировать, а также использовать запятые в качестве разделителей. Это конвейер, поэтому он принимает каждый элемент за раз.

Я не пробовал это, но попробовать:

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), 
    ), 
) 
) 
+0

Я использую запятые в коде. Это просто для простоты. Почему вы добавили один дополнительный массив над другим? И нет, не работал – castt

Смежные вопросы