获取查询中所有文档的大小

Get the size of all the documents in a query

有没有办法获取MongoDBshell中满足某个查询的所有文档的大小?

我正在创建一个工具,它将使用 mongodump(参见 here)和 query 选项将特定数据转储到外部媒体设备上。但是,我想在开始转储之前查看是否所有文档都适合外部媒体设备。这就是为什么我想获取所有满足查询的文档的大小。

我知道 Object.bsonsize 描述的方法 here,但它似乎只有 returns 一个文档的大小。

这是我找到的答案:

var cursor = db.collection.find(...); //Add your query here.
var size = 0;
cursor.forEach(
    function(doc){
        size += Object.bsonsize(doc)
    }
);
print(size);

应该非常准确地输出文档的字节大小。

我已经 运行 命令两次了。第一次,有 141 215 个文件,一旦被转储,总共有大约 108 MB。命令的输出与磁盘上的大小相差 787 字节。

我第二次 运行 命令时,有 35 914 179 个文件,一旦转储,总共有大约 57.8 GB。这一次,命令的大小和磁盘上的实际大小完全相同。

Mongo 4.4 开始,$bsonSize returns 给定文档编码为 BSON 时的字节大小。

因此,为了求和与您的查询匹配的所有文档的 bson 大小:

// { d: [1, 2, 3, 4, 5] }
// { a: 1, b: "hello" }
// { c: 1000, a: "world" }
db.collection.aggregate([
  { $group: {
    _id: null,
    size: { $sum: { $bsonSize: "$$ROOT" } }
  }}
])
// { "_id" : null, "size" : 177 }

$groups 所有匹配的项目在一起,$sums 分组文档' $bsonSize.

$$ROOT 表示我们从中获取 bsonsize 的当前文档。