我的MongoDB数据库名称中有一个拼写错误,我希望重命名该数据库.
我可以像这样删除copy个...
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
是否有重命名数据库的命令?
我的MongoDB数据库名称中有一个拼写错误,我希望重命名该数据库.
我可以像这样删除copy个...
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
是否有重命名数据库的命令?
不,没有.见https://jira.mongodb.org/browse/SERVER-701.
不幸的是,由于数据库元数据存储在原始(默认)存储引擎中的方式,这不是我们要实现的简单功能.在MMAPv1文件中,描述每个单独集合和索引的命名空间(例如:dbName.Collection)包括数据库名称,因此要重命名一组数据库文件,必须重写每个单独的命名空间字符串.这会影响到:
- 这个ns文件
- 集合中的每个单独编号的文件
- 每个索引的名称空间
- 每个集合和索引的内部唯一名称
- 制度内容.名称空间和系统.索引(或future 的类似功能)
- 我可能错过了其他地方
这只是为了在standalone个MonDone实例中完成单个数据库的重命名.对于副本集,上述操作需要在每个副本 node 上完成,此外,在每个 node 上,引用此数据库的每个操作日志(log)条目都必须以某种方式失效或重写,然后,如果它是分片集群,则还需要将这些更改添加到每个分片(如果数据库是分片的),另外配置服务器还拥有名称空间方面的所有分片元数据及其全名.
在一个活的系统上绝对不可能做到这一点.
要离线执行,需要重新写入每个数据库文件以适应新名称,此时速度将与当前的"copydb"命令一样慢...