Intereting Posts
Что означает переменная, установленная в «& NULL», в PHP? Как долго длится моя сессия? Лучший подход для (кросс-платформенной) потоковой передачи данных в реальном времени в PHP? Как изменить каталог проектов Netbeans 7 по умолчанию? завивать и изменять размер удаленного изображения Запуск скрипта оболочки из PHP как другого (не root) пользователя Переиндексирование массива после фильтрации в php? Функция PHP crypt () в JavaScript Почему я получаю утечки памяти в SimplePie при использовании $ item-> get_permalink ()? Проблема с AJAX, загружающая скрипт php, вызываемый из onclick; Как автоматически перенаправить пользователя в Symfony после таймаута сеанса? Как я могу изменить свой массив, который напрямую влияет на мой цикл foreach? jquery $ .post пустой массив Команды не синхронизированы; вы не можете запустить эту команду сейчас, когда вызываете хранимую процедуру в Mysql Ошибка PHPMailer с вызовом неопределенного метода PHPMailer :: SetFrom ()

Сводный запрос MongoDB с использованием драйвера PHP

У меня есть рабочий агрегированный запрос MongoDB который я могу запустить через оболочку MongoDB. Тем не менее, я пытаюсь преобразовать его для работы с официальным драйвером PHP Mongo (http://php.net/manual/en/mongocollection.aggregate.php).

Вот рабочий необработанный запрос MongoDB:

 db.executions.aggregate( [ { $project : { day : { $dayOfYear : "$executed" } } }, { $group : { _id : { day : "$day" }, n : { $sum : 1 } } } , { $sort : { _id : -1 } } , { $limit : 14 } ] ) 

Вот моя попытка (не работает) в PHP с использованием драйвера Mongo:

 $result = $c->aggregate(array( '$project' => array( 'day' => array('$dayOfYear' => '$executed') ), '$group' => array( '_id' => array('day' => '$day'), 'n' => array('$sum' => 1) ), '$sort' => array( '_id' => 1 ), '$limit' => 14 )); 

Ошибка из приведенного выше PHP-кода:

 {"errmsg":"exception: wrong type for field (pipeline) 3 != 4","code":13111,"ok":0} 

Есть идеи? Благодарю.

Параметр в вашем Javascript представляет собой массив из 4 объектов с одним элементом каждый, в вашем PHP это ассоциативный массив (объект) с 4 элементами. Это будет ваш Javascript:

 $result = $c->aggregate(array( array( '$project' => array( 'day' => array('$dayOfYear' => '$executed') ), ), array( '$group' => array( '_id' => array('day' => '$day'), 'n' => array('$sum' => 1) ), ), array( '$sort' => array( '_id' => 1 ), ), array( '$limit' => 14 ) )); 

Кроме того, если у вас есть хотя бы PHP5.4, вы можете использовать более простой синтаксис массива. Трансформация на PHP тогда тривиальна, вы просто заменяете фигурные скобки квадратными скобками и двоеточиями со стрелками:

 $result = $c->aggregate([ [ '$project' => [ 'day' => ['$dayOfYear' => '$executed'] ] ], [ '$group' => ['_id' => ['day' => '$day'], 'n' => ['$sum' => 1] ] ], [ '$sort' => ['_id' => 1] ], [ '$limit' => 14 ] ]);