在MongoDB中检查集合大小的5种方法

发布于

在本文中,我介绍了 5 种方法,在使用 mongo shell 时,您可以使用这些方法来检查 MongoDB 集合的大小。

方法dataSize()

检查MongoDB集合大小的最快和最简单的方法可能是使用该方法。此方法返回集合的大小(以字节为单位)。db.collection.dataSize()

若要调用此方法,只需替换为要检查的集合的名称。collection

例:

db.posts.dataSize()

结果:

3012

此示例检查名为 的集合的大小。它只是一个包含少量小文档的小集合,因此大小仅为 3012 字节。posts

方法totalSize()

该方法返回集合中数据的总大小(以字节为单位)加上集合上每个索引的大小。db.collection.totalSize()

因此,如果您想知道包含所有索引的总大小,请使用此方法。

例:

db.posts.totalSize()

结果:

114688

这与我们在上一个示例上运行的集合相同。该集合有三个索引(包括字段上的索引),我们可以看到总大小明显高于没有索引的集合大小。posts``_id

方法stats()

如果您需要的不仅仅是集合大小,您可以尝试该方法。db.collection.stats()

此方法返回有关集合的统计信息(包括其大小)。

例:

db.posts.stats()

结果(部分):

{
	"ns" : "krankykranes.posts",
	"size" : 3012,
	"count" : 27,
	"avgObjSize" : 111,
	"storageSize" : 36864,
	"freeStorageSize" : 16384,
	"capped" : false,
	"wiredTiger" : {
		"metadata" : {
			"formatVersion" : 1
		},
...

此方法返回大量数据,因此我在这里只返回第一小部分。集合大小列在结果顶部附近的字段中。size

默认情况下,此方法以字节为单位返回大小数据。如果您愿意,可以更改它,使其以千字节为单位报告。为此,请使用值为 .scale``1024

例:

db.posts.stats( { scale: 1024 } )

结果(部分):

{
	"ns" : "krankykranes.posts",
	"size" : 2,
	"count" : 27,
	"avgObjSize" : 111,
	"storageSize" : 36,
	"freeStorageSize" : 16,
	"capped" : false,
	"wiredTiger" : {
		"metadata" : {
			"formatVersion" : 1
		},
...

该方法提供了命令的包装器(如下所示)。db.collection.stats()``collStats

命令collStats

如前所述,该方法是诊断命令的包装器。此命令返回有关集合的统计信息(包括其大小)。db.collection.stats()``collStats

例:

db.runCommand( { collStats : "posts", scale: 1 } )

结果(部分):

{
	"ns" : "krankykranes.posts",
	"size" : 3012,
	"count" : 27,
	"avgObjSize" : 111,
	"storageSize" : 36864,
	"freeStorageSize" : 16384,
	"capped" : false,
	"wiredTiger" : {
		"metadata" : {
			"formatVersion" : 1
		},
...

与该方法一样,此命令返回大量数据,因此我刚刚从顶部抓取了一些内容。stats()

请注意,我在此示例中提供了一个 of 以返回大小数据(以字节为单位)。我们可以将其更改为以千字节为单位返回它。scale``1``1024

例:

db.runCommand( { collStats : "posts", scale: 1024 } )

结果(部分):

{
	"ns" : "krankykranes.posts",
	"size" : 2,
	"count" : 27,
	"avgObjSize" : 111,
	"storageSize" : 36,
	"freeStorageSize" : 16,
	"capped" : false,
	"wiredTiger" : {
		"metadata" : {
			"formatVersion" : 1
		},
...

运营商$bsonSize

MongoDB 4.4中引入了聚合管道运算符,目的是返回BSON文档的大小。$bsonSize

可以使用 通过将集合中所有文档与 and 运算符组合来返回集合中所有文档的总大小。$bsonSize``$group``$sum

例:

db.posts.aggregate([
  {
    $group: {
      "_id": null,
      "rootSize": { $sum: { $bsonSize: "$$ROOT" } }
    }
  }
])

输出:

{ "_id" : null, "rootSize" : 3012 }