MongoDB隱藏技能:如何重命名數(shù)據(jù)庫

問題產(chǎn)生的背景

最近Java組的同事向我請(qǐng)教了一個(gè)問題镰官,就是他們發(fā)現(xiàn)Navicat中對(duì)mysql之類的數(shù)據(jù)庫都有重命名DB名字的功能巫俺,但是針對(duì)mongodb竟然沒有這個(gè)功能采缚,作為強(qiáng)迫癥的開發(fā)者锄贼,不能改名曲稼,絕對(duì)不能忍。

頭腦風(fēng)暴的解決方案

大家提供的想法是通過copydb來實(shí)現(xiàn)硕噩,將數(shù)據(jù)庫的數(shù)據(jù)拷貝到命名好的數(shù)據(jù)庫中假残,然后刪除老的數(shù)據(jù)庫,但是我們現(xiàn)有的DB里數(shù)據(jù)非常多炉擅,執(zhí)行copydb操作太耗時(shí)辉懒,顯示該方法不可取。

峰回路轉(zhuǎn)的解決方案

為了解決這個(gè)問題谍失,仔細(xì)查了一下Mongodb的官方文檔眶俩,

雖然MongoDB沒有renameDatabase的命令,但提供了renameCollection()這個(gè)命令快鱼,詳情參考[官方文檔](https://docs.mongodb.com/manual/reference/method/db.collection.renameCollection/index.html)

這個(gè)命令并不是僅僅能修改collection的名字颠印,同時(shí)也可以修改database。例如我們執(zhí)行如下命令:

```JavaScript

db.adminCommand({renameCollection: "test_db1.test_collection1", to: "test_db2.test_collection2"})

```

上述命令實(shí)現(xiàn)了將test_db1下的test_collection1抹竹,重命名為test_db2下的test_collection2线罕。測(cè)試過程中你會(huì)發(fā)現(xiàn)他會(huì)首先創(chuàng)建一個(gè)目標(biāo)數(shù)據(jù)庫,而且所有的collection都會(huì)出現(xiàn)一個(gè)temp的后綴窃判,過一小會(huì)兒后钞楼,源數(shù)據(jù)庫就消失了。遷移就成功了袄琳。這個(gè)命令只修改元數(shù)據(jù)询件,開銷很小,重命名過程很快就可以完成了唆樊。

有了這個(gè)功能宛琅,要實(shí)現(xiàn)源數(shù)據(jù)庫重命名為目標(biāo)數(shù)據(jù)庫,只需要遍歷源數(shù)據(jù)庫下所有的集合逗旁,重命名到目標(biāo)數(shù)據(jù)庫下嘿辟,就實(shí)現(xiàn)了renameDatabase的功能,我們知道m(xù)ongodb是支持直接執(zhí)行js腳本的,因此直接show you codes:

```JavaScript

collection_list = db.getSiblingDB("original_db_name").getCollectionNames();

for (let i = 0; i< collection_list.length; i++) {

? ? let original_db_name = "original_db_name" +"." + collection_list[i];

? ? let target_db_name = "target_db_name"+"."+ collection_list[i];

? ? db.adminCommand({renameCollection: original_db_name, to: target_db_name});

}

```

總結(jié)

遇到問題红伦,多閱讀官方文檔往往會(huì)得到意想不到的驚喜介陶。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市色建,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舌缤,老刑警劉巖箕戳,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異国撵,居然都是意外死亡陵吸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門介牙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來壮虫,“玉大人,你說我怎么就攤上這事环础∏羲疲” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵线得,是天一觀的道長(zhǎng)饶唤。 經(jīng)常有香客問我,道長(zhǎng)贯钩,這世上最難降的妖魔是什么募狂? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮角雷,結(jié)果婚禮上祸穷,老公的妹妹穿的比我還像新娘。我一直安慰自己勺三,他們只是感情好雷滚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著檩咱,像睡著了一般揭措。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刻蚯,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天绊含,我揣著相機(jī)與錄音,去河邊找鬼炊汹。 笑死躬充,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播充甚,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼以政,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了伴找?” 一聲冷哼從身側(cè)響起盈蛮,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎技矮,沒想到半個(gè)月后抖誉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衰倦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年袒炉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片樊零。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡我磁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出驻襟,到底是詐尸還是另有隱情夺艰,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布沉衣,位于F島的核電站劲适,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏厢蒜。R本人自食惡果不足惜霞势,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望斑鸦。 院中可真熱鬧愕贡,春花似錦、人聲如沸巷屿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘱巾。三九已至憨琳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旬昭,已是汗流浹背篙螟。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留问拘,地道東北人遍略。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓惧所,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親绪杏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子下愈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一、MongoDB簡(jiǎn)介 1.概述 ? MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫蕾久,由C++語言編寫势似。旨在為WE...
    鄭元吉閱讀 978評(píng)論 0 2
  • 一、MongoDB簡(jiǎn)介 概述MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫僧著,由C++語言編寫叫编。旨在為WEB應(yīng)用提供...
    王梓懿_1fbc閱讀 493評(píng)論 0 3
  • 一、MongoDB簡(jiǎn)介 概述MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫霹抛,由C++語言編寫。旨在為WEB應(yīng)用提供...
    EndEvent閱讀 1,163評(píng)論 1 4
  • 一卷谈、MongoDB簡(jiǎn)介 概述MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫杯拐,由C++語言編寫。旨在為WEB應(yīng)用提供...
    fly5閱讀 286評(píng)論 0 0
  • 一世蔗、MongoDB簡(jiǎn)介 概述MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫端逼,由C++語言編寫。旨在為WEB應(yīng)用提供...
    慕楊_閱讀 557評(píng)論 0 4