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 } )
}
}
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 ) + ")" ) ;
} )
} )
} ) ;