2012-01-04 37 views
5

我試圖在我的python代碼(用於監視目的)中獲取db.stats()mongo shell命令的結果。MongoDB:如何從API獲取db.stats()

但不像serverStatus我不能做db.command('stats')。我無法在mongodb文檔中找到任何相應的API。我也嘗試過db.$cmd,但沒有一個工作。

所以,

小問題:我如何才能讓我的Python代碼的db.stats()(連接數/對象,數據的大小&指數等)的結果?

更大的問題:任何人都可以解釋爲什麼一些shell命令很容易從API訪問,而另一些則不是?這是非常煩人的:一些管理相關的工具可通過db.$cmd.sys訪問,有些通過db.command,有些通過...?有這種情況的標準或解釋嗎?

PS:MongoDB的2.0.2,2.1.0 pymongo,蟒蛇2.7

回答

10

JavaScript的外殼的stats命令助手實際上調用了一個名爲dbstats命令,你可以從PyMongo使用Database.command method運行。最簡單的方法找出什麼命令外殼助手將運行是調用外殼助手沒有括號 - 這將打印出Javascript代碼運行:

> db.stats 
function (scale) { 
    return this.runCommand({dbstats:1, scale:scale}); 
} 

至於爲什麼有些命令具有助手和別人做不是,這主要是驅動程序作者使用偏好,時間和感知頻率的問題。您可以使用Database.command按名稱運行任何命令,這僅僅是圍繞db.$cmd.find_one的便利包裝。您可以在List of Database Commands找到完整的命令列表。您也可以使用submit a patch針對PyMongo添加一個輔助方法,您可以找到需要經常調用但PyMongo不支持的命令。

+5

請注意,dbstats在運行時會阻止數據庫,因此它不適用於生產環境。 https://jira.mongodb.org/browse/SERVER-5714 – whit537 2012-05-11 15:36:31

+0

+1輝煌的答案! – 2012-08-17 23:06:01

+0

目前還不清楚在WiredTiger存儲引擎中這仍然是一個阻塞調用:http://stackoverflow.com/questions/36559408/is-db-stats-a-blocking-call-for-mongodb – 2016-04-11 21:54:36