Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取Mongodb中单个文档的大小?_Javascript_Mongodb_Document_Objectid_Objectsize - Fatal编程技术网

Javascript 如何获取Mongodb中单个文档的大小?

Javascript 如何获取Mongodb中单个文档的大小?,javascript,mongodb,document,objectid,objectsize,Javascript,Mongodb,Document,Objectid,Objectsize,我遇到了mongo的一个奇怪行为,我想澄清一下… 我的要求很简单:我想在集合中获得单个文档的大小。 我找到了两种可能的解决方案: Object.bsonsize—一些javascript方法,应该返回以字节为单位的大小 db.collection.stats()-其中有一行“avgObjSize”,该行在数据上生成一些“聚合”(平均)大小视图。它只是表示单个文档的平均大小 当我仅使用一个文档创建测试集合时,两个函数都返回不同的值。怎么可能呢 是否存在其他方法来获取mongo文档的大小 在这

我遇到了mongo的一个奇怪行为,我想澄清一下…
我的要求很简单:我想在集合中获得单个文档的大小。 我找到了两种可能的解决方案:

  • Object.bsonsize—一些javascript方法,应该返回以字节为单位的大小
  • db.collection.stats()-其中有一行“avgObjSize”,该行在数据上生成一些“聚合”(平均)大小视图。它只是表示单个文档的平均大小

  • 当我仅使用一个文档创建测试集合时,两个函数都返回不同的值。怎么可能呢
    是否存在其他方法来获取mongo文档的大小
在这里,我提供了一些我进行测试的代码:

  • 我创建了一个新的数据库“test”,并输入了一个只有一个属性的简单文档:type:“auto”

  • stats()函数调用的输出:db.test.stats():

    }

  • bsonsize函数调用的输出:Object.bsonsize(db.test.find({test:“auto”}))


  • 由于该机制,文档在集合中所占的有效空间将超过文档的大小

    这就是为什么
    db.test.stats()
    Object.bsonsize(…)
    的输出之间存在差异的原因


    要获得文档的确切大小(字节),请坚持使用
    Object.bsonsize()
    函数。

    在上一次调用
    Object.bsonsize()
    时,Mongodb返回的是光标的大小,而不是文档的大小

    正确的方法是使用此命令:

    Object.bsonsize(db.test.findOne())
    
    使用
    findOne()
    ,您可以定义对特定文档的查询:

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

    这将返回特定文档的正确大小(以字节为单位)。

    我建议使用此脚本获取实际大小

    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)');
    });
    
    注意:如果您的ID是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的优势,因此像RoboMongo这样的GUI可以将其制成表格

    来源:

    编辑:感谢您的建议完成。Object.bsonsize(db.test.findOne({type:“auto”}))
    它以字节为单位

    使用mongodb4.4(即将推出),您可以使用运算符获取文档大小

    db.test.aggregate([
      {
        "$project": {
          "name": 1,
          "object_size": { "$bsonSize": "$$ROOT" }
        }
      }
    ])
    

    感谢您的回复,在这种情况下,我还有一个关于这个问题的问题:假设我有一个集合,其中以列表的形式保存具有长标识符列表的文档。(标识符最初存储在txt csv文件中,大小为300 kB;每个标识符的长度为10个字符)在这样的文档上运行bsonsize时,其大小甚至低于481。它返回465。你能给我解释一下这种情况吗?使用哪种大小来强制执行mongDB文档大小限制?Object.bsonsize()?MongoDB文档大小是Mongo的一个限制,这在其网站16MB上的手册中有介绍。我在尝试导入记录时多次达到此限制。如何通过查询获取文档列表的大小?当然,此代码将在计算大小之前获取文档。这不会返回good大小:(…但这是:如何获取Object.bsonsize,什么是import或required语句?对于错过它的任何其他人,您必须使用
    findOne
    而不是
    find
    这正是我要查找的内容,但它不工作可能与我的mongo版本有关。当前版本是3.4?任何其他获取
    TypeError:Object.bsonsize的人都是not函数
    ?你有没有在mongo shell中尝试过?它的工作:正确的标签应该是
    'KiB':Math.round(size/(1024)),'MiB':Math.round(size/(1024*1024))
    (或
    'kB':Math.round(size/(1000)),'MB':Math.round(size/(1000*1000))
    试着解释你的答案。
    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)');
    });
    
    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);
    });
    
    db.test.aggregate([
      {
        "$project": {
          "name": 1,
          "object_size": { "$bsonSize": "$$ROOT" }
        }
      }
    ])