我的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"命令一样慢...

Database相关问答推荐

如何在同一个表的派生部分引用主键?

我们可以出于不同目的在同一 postgres 数据库上同时进行物理和逻辑复制吗?

任何必要的可空外键示例?

您是否遇到过 SQL Server 因为引用了太多表而无法执行的查询?

H2 - 如何截断(truncate)所有表?

复合主键

在 model.save() 中处理竞争条件

tzname字段/时区标识符名称的最大长度

何时将数据库称为嵌入式数据库?

Java中基于文件的数据库

聊天的数据库模式:私有和群组

对百万行表,MySQL 的 LIKE 查询的性能怎样?

SQLite 中内存数据库的优势

无法启动 MongoDB:Windows 中的系统错误 1067

锁定机制(悲观/乐观)如何与数据库事务隔离级别相关?

Redis Pub/Sub 和 Redis Stream 之间的主要区别是什么?

日期格式的 Oracle SQL 查询

复式记账的关系数据模型

什么是提交日志(log)?

C# IEnumerator/yield struct 可能不好?