gpt4 book ai didi

php - 使用 php 驱动程序将查询从 MySql 查询转换为 mongoDB 查询

转载 作者:可可西里 更新时间:2023-11-01 09:36:45 26 4
gpt4 key购买 nike

我必须使用 php 将此查询从 mysql 转换为 mongoDB

SELECT `member_id`, `social_network_id`, `content_type_id` from recent_activity where  content_type_id  = 10  AND social_network_id = 9 group by member_id  order by  recent_activity_id  desc 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) "180305",
["content_type_id"]=>
string(6) "10",
["social_network_id"]=>
string(6) "9",
},
array(2) {
["content_id"]=>
string(6) "122528"
["member_id"]=>
string(6) "180304",
["content_type_id"]=>
string(6) "10",
["social_network_id"]=>
string(6) "9",
},

我试过聚合框架

 $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')),
)
);

我试过这个:

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

但结果并不符合我的预期,分组工作正常但它只返回 member_id 和其他字段

array(2) {
["result"]=>
array(2) {
[0]=>
array(1) {
["_id"]=>
array(1) {
["member_id"]=>
string(5) "18036"
}
}
[1]=>
array(1) {
["_id"]=>
array(1) {
["member_id"]=>
string(6) "180306"
}
}
}
["ok"]=>
float(1)
}

并返回其他字段

所以我需要获取按成员分组的成员的最新 5 项事件,因此结果应该是 5 名成员和 5 项事件,成员 ID 不同,并列出每个成员的所有数据

我收集的数据如:

{ "_id" : ObjectId("528e0b3d33df1b21228dc6a0"), "content_id" : "122542", "content_type_id" : "10", "date_added" : ISODate("2013-11-10T14:06:17Z"), "member_id" : "180306", "platform_id" : "2", "social_network_id" : "91" }

{ "_id" : ObjectId("5291a7a733df1bc3048b4567"), "content_id" : "122542", "content_type_id" : "10", "date_added" : ISODate("2013-11-10T14:06:17Z"), "member_id" : "180326", "platform_id" : "2", "social_network_id" : "9" }


{ "_id" : ObjectId("5291a7a733df1bc3048b4567"), "content_id" : "220252", "content_type_id" : "10", "date_added" : ISODate("2013-11-10T14:06:17Z"), "member_id" : "180316", "platform_id" : "2", "social_network_id" : "9" }

{ "_id" : ObjectId("5291a7a733df1bc3048b4567"), "content_id" : "110252", "content_type_id" : "10", "date_added" : ISODate("2013-11-10T14:06:17Z"), "member_id" : "180316", "platform_id" : "2", "social_network_id" : "9" }

我是 mongoDB 的新手,我花了很多时间来转换这个查询并解决这个错误,任何人都可以帮助我

谢谢

最佳答案

解决

exception: A pipeline stage specification object must contain exactly one field.

$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')))
));

注意包裹每个管道的数组

关于php - 使用 php 驱动程序将查询从 MySql 查询转换为 mongoDB 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20124421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com