【问题标题】:php mongoDB exception: A pipeline stage specification object must contain exactly one fieldphp mongoDB 异常:管道阶段规范对象必须只包含一个字段
【发布时间】:2013-12-08 00:54:12
【问题描述】:

我必须使用 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

我需要这样的结果:

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",
      },

我尝试了聚合框架

 $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 的新手,我花了很多时间来转换这个查询并解决这个错误,任何人都可以帮助我

谢谢

【问题讨论】:

  • $group,你需要'_id'=>'$content_id'
  • 对不起,还是一样的错误

标签: php mongodb


【解决方案1】:

您可以使用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'))), 
            )
        );

$match , $group (管道运算符)应该在数组内。 http://php.net/mongocollection.aggregate

【讨论】:

    猜你喜欢
    • 2020-02-04
    • 2017-07-03
    • 2017-07-17
    • 1970-01-01
    • 2017-09-20
    • 2016-12-27
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多