vimalpt
vimalpt

Reputation: 543

Convert all collection in a single db into new dbs

can you please help me, I am trying to copy all collections in a particular database into create new database and move that collection into it.But the following code does not work. and my colleciton name in the db contains two part ' mg2.data' ,'mg32.data' i want to create new database mg2 and copy collection name as data. collection name mg2.data suppose to be in mg2 database and collection name data.

db.getCollectionNames().forEach(function( a ){
if(a!='system.indexes' ) {
var sp = a.split('.');
var dbName = sp[0];
var col = sp[1];
//print(dbName)

db[a].copyTo(db.getSiblingDB(dbName).getcCollection(col));

}
});

Here is my situation details.

I am having Db name Master and it contains about 60-70 collections its names like(mg1.data,mg2.data,mg3.data) and i want it to be like db name mg1 and collection name data db name mg2 and collection name data and so on.. i am facing the problem that when in the first design write operation locks entire database(Master). i cannot go for sharding and all now.

Upvotes: 3

Views: 87

Answers (1)

vimalpt
vimalpt

Reputation: 543

I got this approach working for me.I dont know is this best aproach

db.getCollectionNames().forEach(function( a ){
if(a!='system.indexes' ) {
var sp = a.split('.');
var dbName = sp[0];
var col = sp[1];
print(dbName+'\n');

//db[a].copyTo(db.getSiblingDB(dbName).getcCollection(col));
db[a].find().forEach(function(d){ db.getSiblingDB(dbName)[col].insert(d); });

}
});

Upvotes: 3

Related Questions