user1949763 user1949763 - 3 months ago 25
Javascript Question

Mongo = get size of single document

I encountered a strange behavior of mongo and I would like to clarify it a bit...

My request is simple as that: I would like to get a size of single document in collection.
I found two possible solutions:



  • Object.bsonsize - some javascript method that should return a size in bytes

  • db.collection.stats() - where there is a line 'avgObjSize' that produce some "aggregated"(average) size view on the data. It simply represents average size of single document.



  • When I create test collection with only one document, both functions returns different values. How is it possible?

    Does it exist some other method to get a size of a mongo document?


Here, I provide some code I perform testing on:


  1. I created new database 'test' and input simple document with only one attribute: type:"auto"

    db.test.insert({type:"auto"})

  2. output from stats() function call: db.test.stats():

    {
    "ns" : "test.test",
    "count" : 1,
    "size" : 40,
    "avgObjSize" : 40,
    "storageSize" : 4096,
    "numExtents" : 1,
    "nindexes" : 1,
    "lastExtentSize" : 4096,
    "paddingFactor" : 1,
    "systemFlags" : 1,
    "userFlags" : 0,
    "totalIndexSize" : 8176,
    "indexSizes" : {
    "_id_" : 8176
    },
    "ok" : 1


    }

  3. output from bsonsize function call: Object.bsonsize(db.test.find({test:"auto"}))

    481


Answer

I have found a solution. In the previous call of Object.bsonsize mongo returned size OF THE CURSOR rather than the document itself.

Correct way is to use this command:

Object.bsonsize(db.test.findOne({test:"auto"}))

this will return the correct size of the particular document (in bytes).