你如何重命名一个MongoDB数据库?

我的MongoDB数据库名称中有一个input错误,我正在重命名数据库。

我可以像这样复制和删除…

db.copyDatabase('old_name', 'new_name'); use old_name db.dropDatabase(); 

有没有一个命令来重命名数据库?

没有没有。 请参阅https://jira.mongodb.org/browse/SERVER-701

不幸的是,由于数据库元数据存储在原始(默认)存储引擎中的方式,这不是我们实现的简单function。 在MMAPv1文件中,描述每个集合和索引的名称空间(例如:dbName.collection)包含数据库名称,因此要重命名一组数据库文件,每个命名空间string都必须重写。 这会影响到:

  • .ns文件
  • 收集每一个编号的文件
  • 每个索引的命名空间
  • 每个集合和索引的内部唯一名称
  • system.namespaces和system.indexes的内容(或将来的等价物)
  • 我可能会失踪的其他地点

这只是为了在独立的 mongod实例中完成一个数据库的重命名。 对于副本集,需要在每个副本节点上完成上述操作,而且在每个节点上,每个指向该数据库的操作日志条目必须以某种方式失效或重写,然后如果是分片集群,则还需要添加这些如果数据库是分片的,则更改为每个分片,并且configuration服务器以名称空间的全名命名所有分片元数据。

在现场系统中绝对没有办法做到这一点。

要离线执行,需要重新写入每一个数据库文件以适应新的名称,在这一点上,它会像当前的“copydb”命令一样慢…

你可以这样做:

 db.copyDatabase("db_to_rename","db_renamed","localhost") use db_to_rename db.dropDatabase(); 

编者注:这是在问题本身使用的相同的方法,但已被certificate对其他人有用无论。

替代解决scheme:您可以转储您的数据库,并以不同的名称恢复。 正如我所经历的,它比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]"}) 

警告 :如果您不想在单个数据库中搞乱不同的集合,那么在复制数据库的时候,嘿伙计们要小心。

以下显示如何重命名

 > show dbs; testing games movies 

要重命名您使用以下语法

 db.copyDatabase("old db name","new db name") 

例:

 db.copyDatabase('testing','newTesting') 

现在,您可以通过以下方式安全地删除旧的数据库

 use testing; db.dropDatabase(); //Here the db **testing** is deleted successfully 

现在想想如果尝试用现有数据库名称重新命名新数据库名称会发生​​什么情况

例:

 db.copyDatabase('testing','movies'); 

所以在这种情况下,所有的testing集合(表格)都将被复制到电影数据库中。

希望它有帮助。 快乐的编码!