我的MongoDB數據庫名稱中存在拼寫錯誤,我正在重新命名數據庫。你如何重命名一個MongoDB數據庫?
我可以copy和刪除這樣的...
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
是否有一個命令來重命名一個數據庫?
我的MongoDB數據庫名稱中存在拼寫錯誤,我正在重新命名數據庫。你如何重命名一個MongoDB數據庫?
我可以copy和刪除這樣的...
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
是否有一個命令來重命名一個數據庫?
不,沒有。見https://jira.mongodb.org/browse/SERVER-701
不幸的是,這不是一個簡單的功能爲我們實現由於該數據庫的元數據存儲在原始(默認)存儲引擎的方式。在MMAPv1文件中,描述每個集合和索引的命名空間(例如:dbName.collection)包含數據庫名稱,因此要重命名一組數據庫文件,每個命名空間字符串都必須重寫。這會影響:
- 的.ns文件
- 的收集
- 命名空間爲每個索引的每一個編號的文件每個收集和索引system.namespaces的
- 內容
- 內唯一的名稱和系統索引(或其將來的等同物)
- 其他位置我可能會丟失
這只是爲了完成一個獨立的 mongod實例中的單個數據庫的重命名。對於副本集,需要在每個副本節點上完成上述操作,而且在每個節點上,每個引用此數據庫的oplog條目必須以某種方式失效或重寫,然後如果它是分片集羣,則還需要添加這些如果數據庫已分片,則更改爲每個分片,並且配置服務器將使用名稱空間中的全名創建所有分片元數據。
在現場系統上絕對沒有辦法做到這一點。
要脫機做到這一點,它需要重新編寫每一個數據庫文件,以適應新的名稱,並在這一點上它會爲當前的「COPYDB」命令,慢...
你可以這樣做:
db.copyDatabase("db_to_rename","db_renamed","localhost")
use db_to_rename
db.dropDatabase();
編者按:這是問題本身所使用的相同的方法,但已被證明有用的人不管。
替代解決方案:您可以轉儲您的數據庫並以不同的名稱恢復它。正如我所經歷的,它比db.copyDatabase()
快得多。
$ mongodump -d old_db_name -o mongodump/
$ mongorestore -d new_db_name mongodump/old_db_name
http://docs.mongodb.org/manual/tutorial/backup-with-mongodump/
上述過程是緩慢的,你可以通過下面的方法,但你需要收集到移動收集到另一個數據庫。
use admin
db.runCommand({renameCollection: "[db_old_name].[collection_name]", to: "[db_new_name].[collection_name]"})
ALERT:嘿人只是要小心,而複製數據庫,如果你不想弄糟下單個數據庫的不同集合。
下面顯示瞭如何重命名
> show dbs;
testing
games
movies
要重命名您使用以下語法
db.copyDatabase("old db name","new db name")
例子:
db.copyDatabase('testing','newTesting')
現在,您可以安全地刪除舊的db通過以下方式
use testing;
db.dropDatabase(); //Here the db **testing** is deleted successfully
現在只是想,如果你嘗試用現有的數據庫名稱重命名新的數據庫名稱會發生什麼
例子:
db.copyDatabase('testing','movies');
所以在這個上下文所有集合(表) 測試將被複制到電影數據庫。
如果您將所有數據都放入管理數據庫(您不應該這樣做),您會注意到db.copyDatabase()
不起作用,因爲您的用戶需要許多您可能不想提供的權限。下面是一個腳本來手動複製數據庫:
use old_db
db.getCollectionNames().forEach(function(collName) {
db[collName].find().forEach(function(d){
db.getSiblingDB('new_db')[collName].insert(d);
})
});
這票已經開了很長一段時間。我已經把我的不太重要的投票加入了已經很長的名單中。 – 2014-03-12 04:55:58
他們建立數據庫並解釋它的方式,重命名似乎是不可能的 - 可能需要一個全新的架構。看起來像一個大的監督,但在愛情,戰爭和軟件開發方面都是公平的。 – staypuftman 2015-10-19 16:58:48
從MongoDb到2017年4月30日,這仍然是真的。 – Daniel 2017-04-30 19:06:33