Я пытаюсь получить доступ к профилировщику MongoDB на PHP с тем же запросом, который я бы использовал в клиенте mongo:
$db = $mongo->selectDB('myapp_db'); $array = $db->execute('return db.system.profile.find();'); echo '<pre>' . print_r($array, true);
Но я понимаю:
Array ( [retval] => Array ( [value] => DBQuery: myapp_db.system.profile -> undefined ) [ok] => 1 )
Профилирование включено и отлично работает в клиенте.
Метод MongoDB :: setProfilingLevel – устанавливает уровень профилирования этой базы данных
<?php $dbname = 'students'; $mongo = (new MongoClient()); $db = $mongo->$dbname; # 0 (off), 1 (queries > 100ms), and 2 (all queries) $db->setProfilingLevel(2); # … # Some queries # … $response = $db->system->profile->find(); foreach ($response as $query) { print_r($query); }
Также:
Нет необходимости выполнять запрос в JavaScript, который блокирует сервер / базу данных, когда вы можете использовать сам PHP:
$mongo = new MongoClient(); // Alternatively, use selectCollection from $mongo->myapp_db $collection = $mongo->selectCollection('myapp_db', 'system.profile'); foreach ($collection->find() as $document) { print_r($document); }
Это обеспечивает более эффективное использование памяти, поскольку вы можете выполнять итерацию результатов вместо получения всего ответа MongoDB :: execute () в одном массиве.
Кроме того, ваш исходный код возвращает курсор (объект DBQuery) из JavaScript. Чтобы обеспечить совместимость с другими драйверами, вы должны вызвать cursor.toArray () перед возвратом. Это обсуждается в ответе Саммай на аналогичный вопрос.