13

I can see the statistics from Mongo shell as

db.stats()

or

db.collection_name.stats()

How do I view statistics of a database, or of a collection, from PHP and Python.

EDIT: I have done it in PHP but still cant do it in Python.

Help?

sophros
  • 14,672
  • 11
  • 46
  • 75
lovesh
  • 5,235
  • 9
  • 62
  • 93

4 Answers4

19

This is how you do it in Python if you are using the PyMongo driver:


connection = pymongo.Connection(host = "127.0.0.1", port = 27017)
db = connection["test_db"]
test_collection = db["test_collection"]
db.command("dbstats") # prints database stats for "test_db"
db.command("collstats", "test_collection") # prints collection-level stats for "test_collection" under "test_db".  

References:

  • db.command()
  • MongoDB: how to get db.stats() from API
  • Community
    • 1
    • 1
    Sagar Hatekar
    • 8,700
    • 14
    • 56
    • 72
    • Can anyone confirm that this and docs are actually accurate? I'm getting `command() missing 1 required positional argument: 'command'` no matter what I pass as an argument. Has this been deprecated and not updated in docs? – CodeSpent Dec 01 '18 at 00:19
    • (incase anyone wants in size other than bytes, for which I struggled alot) - for passing scale you can do this: `db.command("collstats", "test_collection", scale=1024*1024)`. This will convert into MB. You can also also change it up as you like for KB, GB, etc. However, `avgObjSize` will always be in bytes. – raghavsikaria Jun 30 '22 at 11:51
    9

    This is how you do it in PHP

    $con= new Mongo()
    
    $stats=$con->dbName->command(array('dbStats' => 1));  // for db.stats()
    
    $stats=$con->dbName->command(array('collStats' => 'collection_name')); // for db.collection_name.stats()
    

    But how to do this in python?

    lovesh
    • 5,235
    • 9
    • 62
    • 93
    1

    The easiest way I have found to do this with a Mongoengine model was this:

    import mongoengine
    from models import MyModel
    
    connection = mongoengine.connection.get_connection()
    db = connection[MyModel._get_db().name]
    stats = db.command("collstats", MyModel._get_collection_name())
    

    This should allow transparent changes in the collection and database using mongoengine's config settings.

    Adam Lamers
    • 1,183
    • 7
    • 8
    0

    This is PHP code to execute dbStats command with new MongoDB driver:

    $mongo = new \MongoDB\Driver\Manager('mongodb://localhost:27017');
    $cmdstats = new \MongoDB\Driver\Command(['dbStats' => 1]);
    $dbstats = $mongo->executeCommand('databaseName', $cmdstats);
    $dbstats->setTypeMap(array(
        'array' => 'array',
        'document' => 'array',
        'root' => 'array'
    ));
    
    // There must be only one item in $dbstats
    
    foreach ($dbstats as $dbs)
    {
        echo($dbs['dataSize']);
    }
    
    peschanko
    • 353
    • 2
    • 12