Solución:
En la anterior convocatoria de Object.bsonsize()
, Mongodb devolvió el tamaño del cursor, en lugar del documento.
La forma correcta es usar este comando:
Object.bsonsize(db.test.findOne())
Con findOne()
, puede definir su consulta para un documento específico:
Object.bsonsize(db.test.findOne({type:"auto"}))
Esto devolverá el tamaño correcto (en bytes) del documento en particular.
Recomendé usar este script para obtener el tamaño real.
db.users.find().forEach(function(obj)
{
var size = Object.bsonsize(obj);
print('_id: '+obj._id+' || Size: '+size+'B -> '+Math.round(size/(1024))+'KB -> '+Math.round(size/(1024*1024))+'MB (max 16MB)');
});
Nota: Si sus ID son números enteros de 64 bits, lo anterior truncará el valor de ID en la impresión. Si ese es el caso, puede usar en su lugar:
db.users.find().forEach(function(obj)
{
var size = Object.bsonsize(obj);
var stats =
{
'_id': obj._id,
'bytes': size,
'KB': Math.round(size/(1024)),
'MB': Math.round(size/(1024*1024))
};
print(stats);
});
Esto también tiene la ventaja de devolver JSON, por lo que una GUI como RoboMongo puede tabularlo.
fuente: https://stackoverflow.com/a/16957505/3933634
editar: gracias a @zAlbee por su sugerencia de finalización.
La cantidad efectiva de espacio que ocupará el documento en la colección será mayor que el tamaño de su documento debido al mecanismo de relleno de registros.
Es por eso que hay una diferencia entre las salidas del db.test.stats()
y Object.bsonsize(..)
.
Para obtener el exacto tamaño (en bytes) del documento, siga el Object.bsonsize()
función.