MongoDB:如何通过API获取db.stats()

6 投票
1 回答
5518 浏览
提问于 2025-04-17 09:31

我想在我的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添加一个助手方法。

撰写回答