Last active
February 9, 2024 22:37
-
-
Save joeyAghion/6511184 to your computer and use it in GitHub Desktop.
List mongodb collections in descending order of size. Helpful for finding largest collections. First number is "size," second is "storageSize."
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var collectionNames = db.getCollectionNames(), stats = []; | |
collectionNames.forEach(function (n) { stats.push(db[n].stats()); }); | |
stats = stats.sort(function(a, b) { return b['size'] - a['size']; }); | |
for (var c in stats) { print(stats[c]['ns'] + ": " + stats[c]['size'] + " (" + stats[c]['storageSize'] + ")"); } |
Try this to get all DBs, collections and document count:
mongo --eval " db.getMongo().getDBNames().forEach( function(v, i){ db.getSiblingDB(v).getCollectionNames().forEach( function(vv, ii){ print (v + ',' + vv + ',' + db.getSiblingDB(v).getCollection(vv).count() ) } ) } ) "
Is there a way to then store this data in a collection as historical data . To monitor collection size growth over a period of time
@nenohweg something like datadog?
Also here's a version which works better for me - the versions at the top of this thread *** will silently omit values as they error on system.profile
***
(function() {
const byteUnits = [" kB", " MB", " GB", " TB", "PB", "EB", "ZB", "YB"];
// get collections by size sorted
function getReadableFileSizeString(fileSizeInBytes) {
let i = -1;
do {
fileSizeInBytes = fileSizeInBytes / 1024;
i++;
} while (fileSizeInBytes > 1024);
return Math.max(fileSizeInBytes, 0.1).toFixed(1) + byteUnits[i];
}
const collectionNames = db.getCollectionNames();
let stats = [];
for (const name of collectionNames) {
if (name === 'system.profile') {
continue;
}
stats.push(db.getCollection(name).stats());
}
stats = stats.sort(function(a, b) {
return b["size"] - a["size"];
});
for (let i = 0; i < stats.length; i++) {
console.log(stats[i]["ns"] + ": " + getReadableFileSizeString(stats[i]["size"]) + " (" + getReadableFileSizeString(stats[i]["storageSize"]) + ") - ", Number(stats[i].count).toLocaleString(), " docs");
}
})();
Also includes formatted doc count.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
If you're using a newer version of mongo which supports ES6 this is a more terse form of the above with information about the index sizes and uses 3 decimal places like
show dbs
does from the mongo shellwhich would render: