MongoDB:如何通过API获取db.stats()
我想在我的Python代码中获取db.stats()这个MongoDB命令的结果(为了监控目的)。
但是和serverStatus命令不同,我不能用db.command('stats')
来实现。我在MongoDB的文档中找不到任何等效的API。我也尝试过用db.$cmd
的变体,但都没有成功。
所以,
我有个小问题:我该如何在我的Python代码中获取db.stats()
的结果(比如连接数、对象数、数据和索引的大小等)?
还有个大问题:有没有人能解释一下为什么有些命令可以通过API轻松访问,而有些则不行?这真让人烦恼:一些与管理相关的工具可以通过db.$cmd.sys
访问,有些通过db.command
,还有一些通过其他方式?这背后有没有什么标准或解释?
附注:mongodb 2.0.2,pymongo 2.1.0,python 2.7
1 个回答
12
在Javascript的命令行中,stats
这个命令其实是调用了一个叫dbstats
的命令。你可以通过PyMongo来运行这个命令,方法是使用Database.command
方法。想知道一个命令行助手会运行什么命令,最简单的方法就是不加括号直接调用这个助手,这样就会打印出它运行的Javascript代码:
> db.stats
function (scale) {
return this.runCommand({dbstats:1, scale:scale});
}
至于为什么有些命令有助手而有些没有,这主要是因为开发者的个人偏好、时间安排和他们认为的使用频率。你可以通过Database.command
来运行任何命令,这个方法其实就是对db.$cmd.find_one
的一个方便封装。你可以在数据库命令列表中找到所有命令的完整列表。如果你发现有些命令你经常需要用到,但PyMongo还不支持,你也可以提交一个补丁来为PyMongo添加一个助手方法。