2016-07-22 4 views
1

私のクエリはmongodbで動作しており、出力は正しく生成されています。しかし、私はPHPを使用して実行しようとした同じクエリが、それは次のようなエラーにmongoDBのクエリをPHPに変換するには?

私のMongoDBのクエリで

db.sample_coll.aggregate(
{ 
    $unwind: { 
     path:"$KeyValues", 
     includeArrayIndex:"arrayIndex", 
     preserveNullAndEmptyArrays:true 
    } 
}, 
{ 
    $project: { 
     timestamp:{ 
      "$add":["$EventTS",{"$multiply":[60000,"$arrayIndex"]}] 
     } , 
     "InputVolt":"$KeyValues.InputVolt", 
     arrayIndex:1 
     } 
}, 
{ 
    $match: { 
    $and: [ 
     {InputVolt: {$ne: null}} 
    ] 
    } 
} 
); 

続いて上記のクエリが親切に助けPHP

$pipeline = array(
      array('$unwind' => 
        array('path' => '$KeyValues'), 
        array('includeArrayIndex' => 'arrayIndex'), 
        array('preserveNullAndEmptyArrays' => 'true') 
      ), 
      array(
       '$project' => array(
        'timestamp' => array(
         '$add' => array(
          '$EventTS', 
          array('$multiply' => array(60000, '$arrayIndex')) 
         ) 
        ), 
        array('InputVolt' => array('$KeyValues', 'InputVolt' )) , 
        array('arrayIndex' => 1) 
       ) 
      ), 
      array(
       '$match' => array(
        '$and' => array(
         array('InputVolt' => array('$ne' => null)), 
        ) 
       ) 
      ) 

); 
$result = $collection->aggregate($pipeline); 

に変換され

Array 
    (
     [ok] => 0 
     [errmsg] => A pipeline stage specification object must contain exactly one field. 
     [code] => 16435 
    ) 

を与えますこの問題を解決してください。事前に おかげ

答えて

1

PHPであなたのパイプライン:

$pipeline = array(
     array('$unwind' => array(
      'path' => '$KeyValues', 
      'includeArrayIndex' => 'arrayIndex', 
      'preserveNullAndEmptyArrays' => true 
     )), 
     array('$project' => array(
      'timestamp' => array(
       '$add' => array('$EventTS', array('$multiply' => array(60000, '$arrayIndex'))) 
      ), 
      'InputVolt' => '$KeyValues.InputVolt', 
      'arrayIndex' => 1 
     )), 
     array('$match' => array(
      'InputVolt' => array('$ne' => null) 
     )) 
    ); 
関連する問題