2016-09-05 1 views
0

Я создаю приложение на основе MongoDB с PHP. У меня есть коллекция под названием «параметры», в которой у ее документов есть, помимо прочего, массив с именем «включено», который содержит объекты.

Я пытаюсь выполнить команду агрегата, которая будет обращаться к документу «параметров» (на основе значения в переменной $ gid) и превратить каждый элемент массива «включено» в свой собственный документ. Цель состоит в том, чтобы выполнить дополнительные шаги в совокупной трубе, но поскольку проблема у меня есть с $ unwind, я не добавляю их сюда для ясности.

$results = $collection->aggregate(array(
     array('$match' => array('_id' => new MongoId($gid))), 
     array('$project' => array('included' => 1)), 
     array('$unwind' => array('$included')) 
    )); 

Это работает в другом аналогичном случае в приложении, по некоторым причинам в этом случае я получаю ошибки.

PHP Fatal error: Uncaught exception 'MongoResultException' with message 'localhost:27017: expected either a string or an object as specification for $unwind stage, got Array'

Параметры документа:

db.parameters.findOne() 
{ 
    "_id" : ObjectId("57cd573a216985ced0c66bd2"), 
    "name" : "Domains", 
    "keywords" : [ ], 
    "included" : [ 
     { 
      "instance_id" : ObjectId("57cb2ffd216985ced0c66bcb"), 
      "category" : null 
     } 
    ], 
} 

Как уже отмечалось, он прекрасно работает в другом сценарии (различные сборники/документы, но тот же - массив документов). По какой-то причине это вызывает у меня проблемы. Любая помощь будет оценена по достоинству.

ответ

1

Отправка ответа всем, кто может столкнуться с этим, совершая ту же ошибку, что и я. Проблема заключалась в отправке значения $ included в виде массива. Должно быть:

array('$unwind' => '$included') 
Смежные вопросы