Skip to content

mealal/mongoscripts

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MongoDB useful scripts

RS manual failover reconfig:

var st = rs.status();
var cfg = rs.config();
st.members.forEach(s=>{if(s.health == 0) { for (var i=0;i<cfg.members.length;i++) { if(cfg.members[i]._id==s._id) {cfg.members[i].votes=0;cfg.members[i].priority=0;}}}});
rs.reconfig(cfg, {force:true});

Show full instance index usage statistics:

db.adminCommand({listDatabases:1}).databases.forEach(function(dd) {if (!Array.contains(["admin","local","config"], dd.name)) { var d = db.getSiblingDB(dd.name); d.getCollectionInfos().forEach(function(c) {if(c.type == 'collection' && c.name != 'system.views' && c.name != 'system.profile' && c.name != 'system.js') {var res = d.getCollection(c.name).aggregate([{$indexStats:{}}, {"$project":{name:"$name",ops:"$accesses.ops", since:"$accesses.since"}}]); while(res.hasNext()) {var r=res.next(); if (r.name != "_id_") {print("'"+d+"'.'"+c.name+"'.'"+r.name+"': ops="+r.ops+", since="+r.since)}}}})}})

Random sample data generator

for(var i = 0; i <= 10000; i++) {
    var elemId = Math.ceil(Math.random()*1000)+1;
    for(var j = 0; j <= Math.ceil(Math.random()*1000)+200; j++) {
        var dt = new Date(Date.now() - (Math.ceil(Math.random() * 1000 * 60 * 60 * 24*1000)));
        var value = (Buffer.allocUnsafe(100000)).toString();
        db.mytest.insertOne({"elemId":elemId, "dt":dt, "value":value})
    }
}

Export all indexes

var ignoreKeys = ["v", "key", "name", "ns", "safe", "force"];
var ignoreDBs = ["admin","local","config"];
var ignoreIndexes = ['{"_id":1}'];
var dbs = db.getMongo().getDBs().databases.filter(function(dbb) {
    return !Array.contains(ignoreDBs, dbb.name)
});
dbs.forEach(function(dbData) {
    var name = dbData.name;
    var database = db.getSiblingDB(name);
    var collections = database.getCollectionNames();
    collections.forEach(function(collectionName){
        var collection = database.getCollection(collectionName)
        var indexes = collection.getIndexes().filter(function(index) {
            return !Array.contains(ignoreIndexes, JSON.stringify(index.key))
        });
        indexes.forEach(function(index) {
            var options = { "background": "true" };
            var keys = Object.keys(index).filter(function(key) {
                return !Array.contains(ignoreKeys, key)
            });
            keys.forEach(function(key) {
                options[key] = index[key]
            });
            print('db.getSiblingDB("'+name+'").getCollection("'+collectionName+'").createIndex(' + JSON.stringify(index.key) + ',' + JSON.stringify(options) + ")");
        })
    })
});

Releases

No releases published

Packages

No packages published