我试图获得具有相同电子邮件地址的用户数量。
我已经关注了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
,我会收到错误告诉我使用它。
由于
答案 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()
可用作解决方法。