我必须使用php将此查询从mysql转换为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
Run Code Online (Sandbox Code Playgroud)
我需要的结果如下:
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",
},
Run Code Online (Sandbox Code Playgroud)
我尝试使用聚合框架作为
$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,
));
Run Code Online (Sandbox Code Playgroud)
但我得到了这个错误
["errmsg"]=>
string(80) "exception: A pipeline stage specification object must contain exactly one field."
Run Code Online (Sandbox Code Playgroud)
我试过
$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')),
)
);
Run Code Online (Sandbox Code Playgroud)
我是mongoDB的新手我花了很多时间来转换这个查询并解决这个错误,任何人都可以帮助我
谢谢
您可以使用querymongo.com将mysql查询转换为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'))),
)
);
Run Code Online (Sandbox Code Playgroud)
$ match,$ group(管道运算符)应该在数组内部. http://php.net/mongocollection.aggregate