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

我的MongoDB数据库名称中存在拼写错误,我正在重新命名数据库。

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

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

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


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

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

  • .ns文件
  • 收集每一个编号的文件
  • 每个索引的名称空间
  • 每个集合和索引的内部唯一名称
  • system.namespaces和system.indexes的内容(或将来的等价物)
  • 我可能会失踪的其他地点
  • 这只是为了在独立的 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/

    链接地址: http://www.djcxy.com/p/86375.html

    上一篇: How do you rename a MongoDB database?

    下一篇: Can I use MongoDB as a replacement for CoreData on iOS?