2016-07-25 12 views
0

以下のクエリはmongoDBで動作しますが、PHPでは動作しません。 MongoDBのクエリクエリの上アグリゲートからPHPドライバへの集約クエリを使用したMongoDBクエリの変換

db.energy_meter.aggregate(
{ 
    $unwind: { 
     path:"$KeyValues", 
     includeArrayIndex:"arrayIndex", 
     preserveNullAndEmptyArrays:true 
    } 
}, 
{ 
    $project: { 
     timestamp:{ 
      "$add":["$EventTS",{"$multiply":[60000,"$arrayIndex"]}] 
     } , 
     "RPhaseVoltage":"$KeyValues.RPhaseVoltage", 
     arrayIndex:1, 
     } 
} 
); 

が、私は次のようなエラーに

RuntimeException in Aggregate.php line 168: A pipeline stage specification object must contain exactly one field. 

を取得していますPHP

$cursor = DB::collection('energy_meter')->raw(function($collection) 
       { 
        return $collection->aggregate([     
         [ 
          '$unwind' => 
           ['path' => '$KeyValues'], 
           ['includeArrayIndex' => 'arrayIndex'], 
           ['preserveNullAndEmptyArrays' => 'true'] 
         ], 

         [ 
          '$project' => 
           [ 
            'timestamp' => [ 
             '$add' => [ 
               '$EventTS', 
               ['$multiply' => [60000, '$arrayIndex']] 
             ] 
            ] 
           ], 
           [ 
            'MainsInputVoltagev' => ['$KeyValues.MainsInputVoltagev'] 
           ], 
           [ 
            'arrayIndex' => 1 
           ] 
         ] 
        ]); 
       }); 

に変換され、私の変換PHPのクエリでの問題は何ですか?上記の問題の解決を提案してください。

答えて

0

通常のクエリを配列デコードに変換する必要があります。 json_decodeはPHPドライバのクエリを作成し、json_encodeはクエリのmongodbクエリパラメータを与える必要があります。

array(
    array(
    '$unwind' => array(
     'path' => '$KeyValues', 
     'includeArrayIndex' =>"arrayIndex", 
     'preserveNullAndEmptyArrays'=> true 
    ) 
    ), 
    array(
    '$project' => array(
     'timestamp' => array( 
      '$add'=>[ '$EventTS',array('$multiply'=>[60000,'$arrayIndex'])] 
     ) , 
     "RPhaseVoltage" => '$KeyValues.RPhaseVoltage', 
     'arrayIndex' =>1, 
    ) 
    ) 
) 

あなたは少なくともPHP5.4を持っている場合は、より単純な配列構文を使用することができます。このよう

(
{ 
    $unwind: { 
     path:"$KeyValues", 
     includeArrayIndex:"arrayIndex", 
     preserveNullAndEmptyArrays:true 
    } 
}, 
{ 
    $project: { 
     timestamp:{ 
      "$add":["$EventTS",{"$multiply":[60000,"$arrayIndex"]}] 
     } , 
     "RPhaseVoltage":"$KeyValues.RPhaseVoltage", 
     arrayIndex:1, 
     } 
    } 
) 

array([に、)](アレイ)に置き換えてください。

[     
    [ 
     '$unwind' => [ 
      'path' => '$KeyValues', 
      'includeArrayIndex' => 'arrayIndex', 
      'preserveNullAndEmptyArrays' => 'true' 
     ] 
    ], 
    [ 
     '$project' => [ 
      'timestamp' => [ 
       '$add' => [ 
         '$EventTS', 
         [ '$multiply' => [60000, '$arrayIndex'] ] 
       ] 
      ], 
      'MainsInputVoltagev' => '$KeyValues.MainsInputVoltagev', 
      'arrayIndex' => 1 
     ] 
    ] 
] 
関連する問題