PHP Mongo Aggregate异常:管道元素0不是对象

时间:2016-11-03 14:38:28

标签: php mongodb mongodb-query aggregation-framework

我试图获得具有相同电子邮件地址的用户数量。

我已经关注了MongoCollection Aggregate的php文档。我还在stackoverflow上将我的查询与其他查询进行了比较。据我所知,我的管道与示例中的管道匹配。然而我得到了错误:

exception: pipeline element 0 is not an object

我认为是$group元素,它是一个对象(一旦转换为mongo使用的json格式,不是吗?

$pipeline = array(
  array(
    '$group' => array(
      '_id' => array( 'email' => '$email' ),
      'uniqueIds' => array( '$addToSet' => '$_id'  ),
      'count' => array( '$sum' => 1 )
    )
  ),
  array(
    '$match' => array(
      'count' => array( '$gt' => 1 )
    )
  )
);

$options = array(
  'allowDiskUse' => true
);

$results = $mongo->users_collection->aggregate( $pipeline, $options );

我做错了什么?我甚至试过从php.net运行查询,我当然希望没有结果,但它导致了同样的错误!?

编辑所以当我allowDiskUse时就会发现它,但是如果我从函数中删除了$options,我会收到错误告诉我使用它。

由于

1 个答案:

答案 0 :(得分:0)

我找到了解决方案

$results = $mongo->command(array(
  'aggregate' => 'users_collection',
  'pipeline' => $pipeline,
  'allowDiskUse' => true
));

在我看来,因为php允许两种方法(来自php.net

public array MongoCollection::aggregate ( array $pipeline [, array $options ] )

public array MongoCollection::aggregate ( array $op [, array $op [, array $... ]] )

它将我的$options数组视为另一个操作$op。也许这与我们正在使用的Mongo模块版本或其他类似,但更改为$mongo->command()可用作解决方法。