4

编辑:这个问题不是关于香草 MongoDB 的show collections,而是关于mongo-hacker. 请参阅已接受的答案和评论。


使用 Mongo DB 3.2 + WiredTiger,show collections显示两种尺寸:s1 / s2。

show collections
coll_1               → 10.361MB / 1.289MB
coll_2               →  0.000MB / 0.004MB
coll_3               →  0.000MB / 0.016MB
coll_4               →  0.001MB / 0.031MB

我的猜测是:

  • s1:数据库中文档的总大小
  • s2:压缩后磁盘上数据库的大小(文档+索引)

这个对吗?我在文档中找不到任何参考。

4

3 回答 3

13

您可以使用以下查询来获取每个集合的大小:

var collectionNames = db.getCollectionNames(),
  stats = [];
collectionNames.forEach(function (n) {
  stats.push(db[n].stats());
});
for (var c in stats) {
  // skip views
  if (!stats[c]["ns"]) continue;
  print(stats[c]["ns"] + ": " + stats[c]["size"] + " (" + (stats[c]["storageSize"] / 1073741824).toFixed(3) + "GB)");
}

示例输出:

cod-prod-db.orders: 35179407 (0.012GB)
cod-prod-db.system.profile: 4323 (0.000GB)
cod-prod-db.users: 21044037 (0.015GB)
于 2018-11-26T05:28:29.197 回答
9

你在使用 mongo-hacker 吗?默认情况下,在 MongoDB 3.2.11 中,show collections根本不显示任何大小信息。

mongo-hacker 提供的大小信息是从输出中获得的,该输出db.collection.stats().size显示了集合的总未压缩大小(没有索引),并db.collection.stats().storageSize显示了物理存储大小。如果在 WiredTiger 中启用压缩,storageSize通常会小于size.

你可以在这里找到相关的源代码:https ://github.com/TylerBrock/mongo-hacker/blob/0.0.13/hacks/show.js#L57-L72

于 2016-12-01T06:53:53.910 回答
3

与@kalaivani 的答案非常相似,我只是对其进行了重构,以便(对我而言)更容易理解并在 GB 中打印

// Get collection names
var collectionNames = db.getCollectionNames()
var col_stats = [];

// Get stats for every collections
collectionNames.forEach(function (n) { 
    col_stats.push(db.getCollection(n).stats());
});

// Print
for (var item of col_stats) {
    print(`${item['ns']} | size: ${item['size']} 
(${(item['size']/1073741824).toFixed(2)} GB) | storageSize: ${item['storageSize']} 
(${(item['storageSize']/1073741824).toFixed(2)} GB)`);
}
于 2020-05-11T15:56:38.717 回答