Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the size of single document in Mongodb?

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 
like image 408
user1949763 Avatar asked Feb 25 '14 08:02

user1949763


People also ask

How big is a 16MB MongoDB document?

With its 16Mb limit, a MongoDB document can easily store around 2 million values of 64-bit numbers (also dates and booleans). But strings are a special case. Each UTF-8 character takes one byte.

What is the maximum size of a single MongoDB document?

The maximum size an individual document can be in MongoDB is 16MB with a nested depth of 100 levels. Edit: There is no max size for an individual MongoDB database.

What does find () do in MongoDB?

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

What is the use of GridFS in MongoDB?

GridFS is the MongoDB specification for storing and retrieving large files such as images, audio files, video files, etc. It is kind of a file system to store files but its data is stored within MongoDB collections. GridFS has the capability to store files even greater than its document size limit of 16MB.


1 Answers

In the previous call of Object.bsonsize(), Mongodb returned the size of the cursor, rather than the document.

Correct way is to use this command:

Object.bsonsize(db.test.findOne()) 

With findOne(), you can define your query for a specific document:

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

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

like image 79
user1949763 Avatar answered Sep 28 '22 03:09

user1949763