2012-01-04 35 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