- 求職 : Linux運(yùn)維
- 論壇徽章:
- 203
|
最近收到一個AliCloudDB for MongoDB的使用咨詢問題,和大家分享一下,用戶想對database進(jìn)行重命名操作,但因?yàn)镸ongoDB并沒有提供renameDatabase的命令,用戶的想法是通過copydb來實(shí)現(xiàn),先將數(shù)據(jù)庫拷貝一份,然后刪除老的數(shù)據(jù)庫,但由于DB里數(shù)據(jù)很多,copydb太耗時,想知道是否有更好的方法?
雖然MongoDB沒有renameDatabase的命令,但提供了renameCollection的命令,這個命令并不是僅僅能修改collection的名字,同時也可以修改database。
db.adminCommand({renameCollection: "db1.test1", to: "db2.test2"})
上述命令實(shí)現(xiàn)了將db1下的test1,重命名為db2下的test2,這個命令只修改元數(shù)據(jù),開銷很小,有了這個功能,要實(shí)現(xiàn)db1重命名為db2,只需要遍歷db1下所有的集合,重命名到db2下,就實(shí)現(xiàn)了renameDatabase的功能,寫個js腳本能很快的實(shí)現(xiàn)這個功能.
var source = "source";
var dest = "dest";
var colls = db.getSiblingDB(source).getCollectionNames();
for (var i = 0; i < colls.length; i++) {
var from = source + "." + colls[i];
var to = dest + "." + colls[i];
db.adminCommand({renameCollection: from, to: to});
} |
|