javascript - Mongodb如何获取单个文档的大小?

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

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

  • 当我只用一个文档创建测试集合时,两个函数都返回不同的值。这怎么可能?
    是否存在其他方法来获取 mongo 文档的大小?

在这里,我提供一些我执行测试的代码:

  1. 我创建了新的数据库'test'并输入了只有一个属性的简单文档:type:"auto"

    db.test.insert({type:"auto"})
    
  2. stats() 函数调用的输出: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. bsonsize 函数调用的输出:Object.bsonsize(db.test.find({test:"auto"}))

    481
    

最佳答案

在之前的Object.bsonsize()调用中,Mongodb返回的是游标的大小,而不是文档。

正确的方法是使用这个命令:

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

使用 findOne(),您可以为特定文档定义查询:

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

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

https://stackoverflow.com/questions/22008822/

相关文章:

mongodb - 更新 MongoDB 中精确元素数组中的字段

collections - MongoDB一次查询多个集合

c# - 在 MongoDB 中将枚举存储为字符串

c# - MongoDB GridFs with C#,如何存储图片等文件?

mongodb - 将 "working set"放入 MongoDB 的 RAM 是什么意思?

javascript - 如何在 Node.js 中使用带有 Promise 的 MongoDB?

mongodb - 存储在 MongoDB 中的数组是否保持顺序?

linux - 删除mongodb的日志文件安全吗?

java - “字段需要一个无法找到的 bean。”使用mongodb的错误spring restf

mongodb - MySql 是否有一个示例 MongoDB 数据库?