Mongo = получить размер одного документа

я столкнулся со странным поведением монго, и я хотел бы немного прояснить его...
Мой запрос прост: я хотел бы получить размер одного документа в коллекции. Я нашел два возможных решения:--4-->

    3 ответов


    Я нашел решение. В предыдущем вызове


    эффективный объем пространства, который документ займет в коллекции, будет больше размера вашего документа из-за Запись Обивка механизм.

    вот почему существует разница между выходами db.test.stats() и Object.bsonsize(..).

    для получения точно размер (в байтах) документа, придерживаться


    Я рекомендую использовать этот скрипт, чтобы получить реальный размер.

    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)');
    });
    

    Примечание: Если ваши идентификаторы являются 64-битными целыми числами, выше будет усекать значение ID при печати! Если это так, вы можете использовать вместо этого:

    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);
    });
    

    Это также имеет преимущество возвращения JSON, поэтому GUI, такой как RoboMongo, может табулировать его!

    источник:https://stackoverflow.com/a/16957505/3933634

    edit: благодаря @zAlbee для вашего предлагаю завершения.