2016-11-03 4 views
1

同じ電子メールアドレスを持つユーザーの数を取得しようとしています。PHP Mongo集計例外:パイプライン要素0はオブジェクトではありません

私はMongoCollection Aggregateのphpドキュメントに従っています。私はまた、stackoverflowで私のクエリを他のものと比較しました。私のパイプラインには、例のものと一致することがわかります。そして、まだ、私はエラーを取得する:私は推測

exception: pipeline element 0 is not an object

オブジェクトである$group要素は、(一回JSONフォーマットのmongoに変換使用しています、それはないです

$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

'_id '=> array(' email '=>' $ email ')、' '最初のカンマオカレンス'(、) 'を取り除き、 '_id' => array( 'email' => '$ email')、 ' – chridam

+1

ありがとうございます。 – James

答えて

0

私はPHPが(php.netから)これを行うには二つの方法

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

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

することができますので、それは私を見ているように私には思えるこの

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

への解決策を見つけました他の操作として$options配列$op。おそらくこれは、使用しているMongoモジュールのバージョンやその行にあるものと関係があるかもしれませんが、回避策として$mongo->command()に変更することができます。

関連する問題