db.collection.stats 返回的 Object.bsonsize 和 avgObjSize 有什么区别?

Kir*_*irl 2 mongodb storage database-size size

在我的收藏中,我的文档似乎比较相似。我需要知道我的生产服务器需要多少存储空间来存储我的文档,这就是我查询的原因:

db.collectionName.stats()
Run Code Online (Sandbox Code Playgroud)

我的字段 avgObjSize 大约为 6442 字节。我在我的收藏中选择了一个随机文档,我输入:

Object.bsonsize(db.collectionName.find({"_id" :         ObjectId("5508497c51a990da07b07106")}))
Run Code Online (Sandbox Code Playgroud)

我获得了 810 个字节。

为什么我有这么大的差异?

我还注意到,我存储的文档越多,avgObjSize 减少的越多……这正常吗?(我查过,我的文件不是空的。)

它是一个开发服务器,所以我使用的是 Red Hat Enterprise Linux 5.8,它是一个 32 位版本。

Ste*_*nie 11

我的字段 avgObjSize 大约为 6442 字节。我在我的收藏中选择了一个随机文档,我输入:

Object.bsonsize(db.collectionName.find({"_id" : ObjectId("5508497c51a990da07b07106")}))

我获得了 810 个字节。

为什么我有这么大的差异?

db.collection.find()方法返回一个游标,因此您计算的是游标对象的大小而不是文档的大小。

db.collection.findOne()如果要测量 BSON 大小,应使用返回单个文档:

Object.bsonsize(db.collectionName.findOne(
    {"_id" : ObjectId("5508497c51a990da07b07106") }
))
Run Code Online (Sandbox Code Playgroud)

我还注意到,我存储的文档越多,avgObjSize 减少的越多……这正常吗?(我查过,我的文件不是空的。)

平均值基于集合中文档的大小,因此随着时间的推移,您的趋势是插入较小的文档。正常行为完全取决于您的用例;-)