我正在尝试在我的python代码中获取db.stats()mongo shell命令的结果(出于监视目的)。
但是与例如serverStatus不同,我做不到db.command('stats')。我在mongodb文档中找不到任何等效的API。我也尝试了变体,db.$cmd但没有一个奏效。
db.command('stats')
db.$cmd
所以,
小问题:如何db.stats()在python代码中获得(连接/对象数,数据和索引的大小等)结果?
db.stats()
更大的问题:谁能解释为什么一些shell命令可以从API轻松访问而另一些则不能?这很烦人:某些与管理员相关的工具可通过db.$cmd.sys,某些db.command,某些…来访问?有这种情况的标准或解释吗?
db.$cmd.sys
db.command
PS:mongodb 2.0.2,pymongo 2.1.0,python 2.7
Javascript shell的stats命令助手实际上调用了一个名为的命令dbstats,您可以使用Database.command方法从PyMongo运行该命令。找出shell帮助程序将运行什么命令的最简单方法是不带括号地调用shell帮助程序- 这将打印出它运行的Javascript代码:
stats
dbstats
Database.command
> db.stats function (scale) { return this.runCommand({dbstats:1, scale:scale}); }
至于为什么有些命令有帮助程序而其他命令却没有帮助程序,这很大程度上是驱动程序作者偏好,时间和使用频率的问题。您可以使用来按名称运行任何命令Database.command,这只是一个方便的包装db.$cmd.find_one。您可以在“数据库命令列表”中找到命令的完整列表。您还可以提交针对PyMongo的补丁,为您发现需要经常调用但PyMongo尚不支持的命令添加辅助方法。
db.$cmd.find_one