2013-04-01 58 views
1

我試圖通過組「組名」,然後選擇域「組名」和「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

逗號分隔? 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