在我的MongoDB数据库名称中有一个错别字,我正在寻找重命名数据库。

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

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

是否有重命名数据库的命令?


当前回答

在将所有数据放入管理数据库的情况下(您不应该这样做),您将注意到db.copyDatabase()将不起作用,因为您的用户需要许多特权,而您可能不想给予它。下面是一个手动复制数据库的脚本:

use old_db
db.getCollectionNames().forEach(function(collName) {
    db[collName].find().forEach(function(d){
        db.getSiblingDB('new_db')[collName].insert(d); 
    }) 
});

其他回答

注意:希望在最新版本中有所改变。 不能在MongoDB 4.0 mongod实例之间复制数据 FCV值)和MongoDB 3.4和更早的mongod实例。 https://docs.mongodb.com/v4.0/reference/method/db.copyDatabase/

警告:嘿,伙计们,在复制数据库时要小心,如果你不想在一个数据库下搞砸不同的集合。

下面展示了如何重命名

> 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('DB_toBeRenamed','Db_newName','host') 

然后才知道它已经被mongo社区弃用了,尽管它创建了备份或重命名了DB。

WARNING: db.copyDatabase is deprecated. See http://dochub.mongodb.org/core/copydb-clone-deprecation
{
        "note" : "Support for the copydb command has been deprecated. See 
        http://dochub.mongodb.org/core/copydb-clone-deprecation",
        "ok" : 1
}

所以不相信上面的方法,我不得不采取转储本地使用下面的命令

mongodump --host --db DB_TobeRenamed --out E://FileName/

连接到Db。

use DB_TobeRenamed

然后

db.dropDatabase()

然后使用命令恢复数据库。

mongorestore -host hostName -d Db_NewName E://FileName/

在将所有数据放入管理数据库的情况下(您不应该这样做),您将注意到db.copyDatabase()将不起作用,因为您的用户需要许多特权,而您可能不想给予它。下面是一个手动复制数据库的脚本:

use old_db
db.getCollectionNames().forEach(function(collName) {
    db[collName].find().forEach(function(d){
        db.getSiblingDB('new_db')[collName].insert(d); 
    }) 
});

替代解决方案:您可以转储您的数据库,并恢复到不同的名称。根据我的经验,它比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/


这是目前官方推荐的数据库重命名方法,因为copyDatabase在MongoDB 4.2中被删除了:

"copydb"命令已弃用,请使用以下两个命令: mongodb(用于备份数据) Mongorestore(将数据从mongodb恢复到一个新的命名空间)

mongoshdeprecederror: [COMMON-10003] copyDatabase()已被移除,因为它在MongoDB 4.0中已弃用