获取查询中所有文档的大小
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 }
这 $group
s 所有匹配的项目在一起,$sum
s 分组文档' $bsonSize
.
$$ROOT
表示我们从中获取 bsonsize 的当前文档。
有没有办法获取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 }
这 $group
s 所有匹配的项目在一起,$sum
s 分组文档' $bsonSize
.
$$ROOT
表示我们从中获取 bsonsize 的当前文档。