2013-11-23 1 views
4

я должен преобразовать этот запрос из MySQL к MongoDB с помощью PHPPHP MongoDB исключение: Объект спецификация этап трубопровода должна содержать ровно одно поле

select content_id ,member_id, content_type_id,social_network_id from recent_activty where content_type_id = 10 AND social_network_id = 9 order by id desc group by content_id limit 5 

Мне нужен результат, как:

array(2) { 
     ["content_id"]=> 
     string(6) "122558" 
     ["member_id"]=> 
     string(6) "180306", 
     ["content_type_id"]=> 
     string(6) "10", 
     ["social_network_id"]=> 
     string(6) "9", 
     }, 
     array(2) { 
     ["content_id"]=> 
     string(6) "122549" 
     ["member_id"]=> 
     string(6) "180306", 
     ["content_type_id"]=> 
     string(6) "10", 
     ["social_network_id"]=> 
     string(6) "9", 
     }, 
     array(2) { 
     ["content_id"]=> 
     string(6) "122528" 
     ["member_id"]=> 
     string(6) "180306", 
     ["content_type_id"]=> 
     string(6) "10", 
     ["social_network_id"]=> 
     string(6) "9", 
     }, 

Я попытался Aggregation Framework, как

$result = $collection->aggregate(array(
      '$match' => array('content_type_id'=>"10", "social_network_id"=>"9"), 
      '$project' => array('content_type_id'=>1, "social_network_id"=>1, "content_id"=>1), 
      '$group' => array('_id' => array('member_id'=>'$member_id')), 
      '$sort' => array('_id'=>-1), 
      '$limit' => 5, 
     )); 

Но я получил эту ошибку

["errmsg"]=> 
    string(80) "exception: A pipeline stage specification object must contain exactly one field." 

и я попытался

$result = $collection->aggregate(array(
        '$match' => array('content_type_id'=>"10", "social_network_id"=>"9"), 
        '$project' => array("_id"=>'$content_id' ,'content_type_id'=>1), 
        '$group' => array('_id' => array('content_id'=>'$content_id', 'member_id'=>'$member_id')), 
       ) 
      ); 

Я новичок в MongoDB И я потратил много времени, чтобы преобразовать этот запрос и решить эту ошибку, любой один может помочь мне

Благодаря

+0

$ group, вам нужно '' _id '=>' $ content_id'' – Sammaye

+0

Простите, та же ошибка все еще сохраняется –

ответ

9

Вы можете использовать querymongo.com для преобразования MySQL д ueries to mongo. Для этого вопроса ваш код должен быть таким.

$result = $collection->aggregate(array(
       array(
       '$match' => array('content_type_id'=>"10", "social_network_id"=>"9" 
       )), 
       array(
       '$project' => array("_id"=>'$content_id' ,'content_type_id'=>1 
       )), 
       array(
       '$group' => array('_id' => array('content_id'=>'$content_id', 'member_id'=>'$member_id'))), 
      ) 
     ); 

$ match, $ group (операторы трубопровода) должны быть внутри массива. http://php.net/mongocollection.aggregate

Смежные вопросы