我遇到了 mongo 的奇怪行为,我想澄清一下……
我的要求很简单:我想在集合中获取单个文档的大小。我找到了两种可能的解决方案:
- Object.bsonsize - 一些应该以字节为单位返回大小的 javascript 方法
- db.collection.stats() - 其中有一行 ‘avgObjSize’ 生成一些数据的“聚合”(平均)大小视图。它只是代表单个文档的平均大小。
当我只用一个文档创建测试集合时,两个函数返回不同的值。这怎么可能?
是否存在其他方法来获取 mongo 文档的大小?
在这里,我提供了一些我执行测试的代码:
- 我创建了新数据库“test”并输入了只有一个属性的简单文档:type:“auto”
db.test.insert({type:"auto"})
- 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
}
- bsonsize 函数调用的输出: Object.bsonsize(db.test.find({test:“auto”}))
481
原文由 user1949763 发布,翻译遵循 CC BY-SA 4.0 许可协议
在之前调用
Object.bsonsize()
时,Mongodb 返回游标的大小,而不是文档的大小。正确的方法是使用这个命令:
使用
findOne()
,您可以为特定文档定义查询:这将返回特定文档的正确大小(以字节为单位)。