6

I'm trying to get results of db.stats() mongo shell command in my python code (for monitoring purposes).

But unlike for example serverStatus I can't do db.command('stats'). I was not able to find any API equivalent in mongodb docs. I've also tried variations with db.$cmd but none of that worked.

So,

Small question: how can I get results of db.stats() (number of connections/objects, size of data & indexes, etc) in my python code?

Bigger question: can anyone explain why some of shell commands are easily accessible from API, while others are not? It's very annoying: some admin-related tools are accessible via db.$cmd.sys, some via db.command, some via ...? Is there some standard or explanation of this situation?

PS: mongodb 2.0.2, pymongo 2.1.0, python 2.7

sophros
  • 14,672
  • 11
  • 46
  • 75
rvs
  • 1,251
  • 13
  • 22

1 Answers1

12

The Javascript shell's stats command helper actually invokes a command named dbstats, which you can run from PyMongo using the Database.command method. The easiest way to find out what command a shell helper will run is to invoke the shell helper without parentheses -- this will print out the Javascript code it runs:

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

As for why some commands have helpers and others do not, it's largely a question of preference, time, and perceived frequency of use by the driver authors. You can run any command by name with Database.command, which is just a convenience wrapper around db.$cmd.find_one. You can find a full list of commands at List of Database Commands. You can also submit a patch against PyMongo to add a helper method for commands you find that you need to invoke frequently but aren't supported by PyMongo yet.

dcrosta
  • 26,009
  • 8
  • 71
  • 83
  • 5
    Be warned that dbstats blocks your database while it runs, so it's not suitable in production. https://jira.mongodb.org/browse/SERVER-5714 – whit537 May 11 '12 at 15:36
  • It's not clear this is still a blocking call in the `WiredTiger` storage engine: http://stackoverflow.com/questions/36559408/is-db-stats-a-blocking-call-for-mongodb – Jeff Widman Apr 11 '16 at 21:54