2016-11-03 1 views
1

Я пытаюсь получить число пользователей с тем же адресом электронной почты.PHP Mongo Совокупное исключение: элемент конвейера 0 не является объектом

Я следовал документации php для MongoCollection Aggregate. Я также сравнил свой запрос с другими в stackoverflow. Насколько я могу судить о том, что мой конвейер соответствует примеру в примерах. И все же я получаю сообщение об ошибке:

exception: pipeline element 0 is not an object

Что я полагаю, является $group элемент, который является объектом (после преобразования в формат 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, я, конечно, не ожидал результатов, но это привело к такой же ошибке !?

EDIT так получается, что когда я allowDiskUse, но если я удалю $options из функции, я получаю сообщение об ошибке.

Благодаря

+1

У вас есть опечатка на этой строке '' _id '=> array (' email '=>' $ email ',), 'просто избавиться от первого появления запятой' (,) 'и переписать код, чтобы показать' '_id' => array ('email' => '$ email'), ' – chridam

+1

Спасибо, не разрешает ошибку, хотя :( – James

ответ

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->command() работает как обходной путь.

Смежные вопросы