2016-06-13 4 views
1

私はMongoChefを使用して$matchを実行し、次に$groupを実行し、$projectを実行しています。作業中のMongoDB集約パイプラインクエリをPHPに変換する際の問題

次のコードは、正しい出力を生成し、MongoDBの自体に取り組んで確認されている:

db.collection_name.aggregate(
    [ 
    { 
     $match: { 
      ":energy_mon_id" : 9 
     } 
    }, 
    { 
     $group: { 
      "_id" : { 
       "Date" : "$:date" 
      }, 
      "avg_voltage_a" : { 
       "$avg" : "$:voltage_a" 
      }, 
      "avg_voltage_b" : { 
       "$avg" : "$:voltage_b" 
      }, 
      "avg_voltage_c" : { 
       "$avg" : "$:voltage_c" 
      } 
     } 
    }, 
    { 
     $project: { 
      "avg_volt" : { 
       "$add" : [ 
        "$avg_voltage_a", 
        "$avg_voltage_b" 
       ] 
      } 
     } 
    }, 
    { 
     $match: { 
     } 
    } 
    ] 
); 

生成される出力は、これが(avg_volt values are integersことに注意してください)です。今

{ "_id" : { "Date" : "2016-06-06" }, "avg_volt" : 779 } 
{ "_id" : { "Date" : "2016-06-08" }, "avg_volt" : 779 } 

問題私はこれがPHPで正しく動作するようになっていることに直面しています。

PHPでの私のコードは以下の通りです:

$collection = $this->db->testdb->collection_name; 

    $aggrCommand = array(
     array(
     '$match' => array(":energy_mon_id" => 9) 
    ), 
    array( 
     '$group' => array( 
     "_id" => array( 
      "Date" => "$:date" 
     ), 
     "avg_voltage_a" => array( 
      '$avg' => "$:voltage_a" 
     ), 
     "avg_voltage_b" => array( 
      '$avg' => "$:voltage_b" 
     ), 
     "avg_voltage_c" => array( 
      '$avg' => "$:voltage_c" 
     ), 
     ) 
    ), 
    array(
     '$project' => array(
     "avg_volt" => array(
      '$add' => ["$avg_voltage_a","$avg_voltage_b" ] 
     ) 
     ) 
    ) 
    ); 

    $list = $collection->aggregate($aggrCommand); 

私は郵便配達を経由してGETリクエストを提出しようとすると、私が手にエラーがこの非常に最後の行を次のとおりです。

Slim Application Error 
The application could not run because of the following error: 
Details 
Type: MongoDB\Driver\Exception\RuntimeException 
Code: 16554 
Message: $add only supports numeric or date types, not String 
File: C:\wamp\www\DRM\vendor\mongodb\mongodb\src\Operation\Aggregate.php 
Line: 168 

これは意味がありませんなぜなら、MongoDBの出力は整数値なので、私はPHPへの変換でエラーを検出できません。

私のフィールド名は実際にコロンを前面に付いています(間違いではありません)が、ここで問題にはならないと思います。

私は実際にこの問題に悩まされています。誰かがこの問題を解決する方法についてアドバイスを提供できますか?私のMongoDBコマンドの出力は明らかに文字列ではありませんが、PHPではavg_voltage_aとavg_voltage_bの値は文字列です。これはまったく意味がありません。

答えて

-2

PHPは変数としての「$ avg_voltage_aを」解釈防ぐために、あなたの「$追加」文の中で、単一引用符で試してみてください:

'$add' => ['$avg_voltage_a','$avg_voltage_b' ] 
関連する問題