2013-01-03 3 views
3

MongoDB 쉘을 통해 실행할 수있는 MongoDB 집계 쿼리가 있습니다. 그러나, 나는 공식 PHP 몽고 드라이버 (http://php.net/manual/en/mongocollection.aggregate.php)와 함께 작동하도록 변환하려고합니다.PHP 드라이버를 사용하는 MongoDB 집계 쿼리

$result = $c->aggregate(array(
    '$project' => array(
     'day' => array('$dayOfYear' => '$executed') 
    ), 
    '$group' => array(
     '_id' => array('day' => '$day'), 
     'n' => array('$sum' => 1) 
    ), 
    '$sort' => array(
     '_id' => 1 
    ), 
    '$limit' => 14 
)); 

위의 PHP 코드에서 오류 : 여기

db.executions.aggregate([ 
    { $project : { day : { $dayOfYear : "$executed" } } }, 
    { $group : { _id : { day : "$day" }, n : { $sum : 1 } } } , 
    { $sort : { _id : -1 } } , 
    { $limit : 14 } 
]) 

는 몽고 드라이버를 사용 PHP에서 (작동하지 않는) 내 시도 입니다 : 여기

는 작업 원 MongoDB의 쿼리입니다 is :

{"errmsg":"exception: wrong type for field (pipeline) 3 != 4","code":13111,"ok":0} 

아이디어가 있습니까? 감사.

답변

14

자바 스크립트의 매개 변수는 각각 하나의 요소가있는 4 개의 개체 배열이며 PHP에서는 4 개의 요소가있는 연관 배열 (개체)입니다. 이것은 당신의 자바 스크립트 나타낼 것입니다 : 당신이 적어도 PHP5.4이있는 경우, 또한

$result = $c->aggregate(array(
    array(
     '$project' => array(
      'day' => array('$dayOfYear' => '$executed') 
    ), 
    ), 
    array(
     '$group' => array(
      '_id' => array('day' => '$day'), 
      'n' => array('$sum' => 1) 
    ), 
    ), 
    array(
     '$sort' => array(
      '_id' => 1 
    ), 
    ), 
    array(
     '$limit' => 14 
    ) 
)); 

을, 당신은 간단하게 배열 구문을 사용할 수 있습니다. PHP 로의 변환은 간단합니다. 중괄호는 대괄호로, 콜론은 화살표로 바꿉니다.

$result = $c->aggregate([ 
    [ '$project' => [ 'day' => ['$dayOfYear' => '$executed'] ] ], 
    [ '$group' => ['_id' => ['day' => '$day'], 'n' => ['$sum' => 1] ] ], 
    [ '$sort' => ['_id' => 1] ], 
    [ '$limit' => 14 ] 
]); 
+1

와우, 고마워요. 작은 조정이 필요하다.'sum'은'$ sum' 일 필요가있다. 이 궁금증을 어떻게 빨리 채찍질 할 수 있었는지 궁금 해서요? – Justin

+0

최근 PHP에서 Mongo 쿼리로 많은 작업을 해보았습니다. ;) – AndreKR

+2

이것은 다소 고약한 건물 집합체입니다. – Justin