2013-02-08 24 views
1

我試圖訪問MongoDB的探查PHP中我將在蒙戈客戶端使用相同的查詢:如何訪問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 
) 

分析已啓用並正常工作在客戶端。

回答

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

另外:

1

沒有必要以執行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()響應在一個數組中。

此外,您的原始代碼從JavaScript返回遊標(一個DBQuery對象)。爲確保與其他驅動程序的兼容性,您應在返回之前調用cursor.toArray()。這在Sammaye對類似問題here的回答中進行了討論。