我遇到了mongo的一个奇怪行为,我想澄清一下......
我的要求很简单:我想在集合中获取单个文档的大小。
我找到了两种可能的解决方案:
- Object.bsonsize - 一些以字节为单位返回大小的 javascript 方法
- db.collection.stats() - 有一行 'avgObjSize' 在数据上产生一些“聚合”(平均)大小 View 。它只是表示单个文档的平均大小。
当我只用一个文档创建测试集合时,两个函数都返回不同的值。这怎么可能?
是否存在其他方法来获取 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
最佳答案
在之前的Object.bsonsize()
调用中,Mongodb返回的是游标的大小,而不是文档。
正确的方法是使用这个命令:
Object.bsonsize(db.test.findOne())
使用 findOne()
,您可以为特定文档定义查询:
Object.bsonsize(db.test.findOne({type:"auto"}))
这将返回特定文档的正确大小(以字节为单位)。
关于javascript - Mongodb如何获取单个文档的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22008822/