Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB: how to get db.stats() from API

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

like image 486
rvs Avatar asked Jan 04 '12 11:01

rvs


People also ask

How do I view stats in MongoDB?

The db. stats() method is used to return a document that reports on the state of the current database. The scale at which to deliver results. Unless specified, this command returns all data in bytes.

What is db stats in MongoDB?

dbStats.scaleFactor. scale value used by the command. If you specified a non-integer scale factor, MongoDB uses the integer part of the specified factor. For example, if you specify a scale factor of 1023.999 , MongoDB uses 1023 as the scale factor. New in version 4.2.

What does find () do in MongoDB?

In MongoDB, find() method is used to select documents in a collection and return a cursor to the selected documents.

Which method returns MongoDB statistics collection?

If true , db. collection. stats() returns index details in addition to the collection stats.


1 Answers

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.

like image 50
dcrosta Avatar answered Sep 29 '22 02:09

dcrosta