1

我正在尝试使用在 mongo 客户端中使用的相同查询来访问 PHP 中的 MongoDB 分析器:

$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
)

分析已启用并在客户端中正常工作。

4

2 回答 2

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);
}

还:

于 2013-02-10T01:17:24.347 回答
1

当您可以使用 PHP 本身时,无需在 JavaScript 中执行查询,这会阻塞服务器/数据库:

$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()响应。

此外,您的原始代码从 JavaScript 返回游标(一个 DBQuery 对象)。为了确保与其他驱动程序的兼容性,您应该在返回之前调用cursor.toArray() 。这在 Sammaye 对类似问题的回答中进行了讨论

于 2013-04-08T21:23:22.740 回答