我的 MongoDB 数据库名中有一个错别字,我想要重命名该数据库。
我可以像这样 复制 并删除...
db.copyDatabase('old_name', 'new_name');
use old_name
db.dropDatabase();
是否有重命名数据库的命令?
如果你正在使用MongoDB < 4.2 (参考),你可以这样做:
db.copyDatabase("db_to_rename","db_renamed","localhost")
use db_to_rename
db.dropDatabase();
编辑说明:这是与问题本身相同的方法,但已经被其他人证明是有用的。
copyDatabase
method" 吗?如果是,我的翻译如下:这与实际问题相同,唯一的区别在于 copyDatabase
方法的第三个参数。 - Gurbakhshish SinghcopyDatabase
。请参考我的答案获取当前和现代的方法。 - amcgregor另一种解决方案:您可以转储数据库并将其恢复到不同的名称。 从我的经验来看,这比 db.copyDatabase()快得多。
<code>$ mongodump -d old_db_name -o mongodump/
$ mongorestore -d new_db_name mongodump/old_db_name
</code>
http://docs.mongodb.org/manual/tutorial/backup-with-mongodump/
这是针对数据库重命名的当前官方推荐方法,考虑到copyDatabase
在MongoDB 4.2中已被移除:
“copydb”命令已经过时,请改用以下两个命令:
- mongodump(备份数据)
- mongorestore(从mongodump中恢复数据到新命名空间)
mongodump
。不知道你可以用不同的名称还原它。谢谢! - Dushyant Bangal--gzip
并创建一个存档文件,这个方法不会起作用。 - Dushyant Bangaldb.copyDatabase()
已经被弃用。 - osolmaz注意:希望这在最新版本中已经改变了。
无论 FCV 值如何,您都不能在 MongoDB 4.0 mongod 实例和 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')
现在,您可以通过以下方式安全地删除旧的数据库
use testing;
db.dropDatabase(); //Here the db **testing** is deleted successfully
现在想象一下,如果你试图将新数据库名称重命名为现有数据库名称会发生什么
例如:
db.copyDatabase('testing','movies');
因此,在这个情境下,所有测试的集合(表)都将被复制到电影数据库。
db.copyDatabase
在mongodb 4.4上已经不再使用。 - DeecopyDatabase
已被弃用,现在我们应该使用mongodump
和mongorestore
。
假设我们有一个名为old_name
的数据库,我们想要将其重命名为new_name
。
首先我们需要转储数据库:
mongodump --archive="old_name_dump.db" --db=old_name
如果您需要作为用户进行身份验证,请使用:
mongodump -u username --authenticationDatabase admin \
--archive="old_name_dump.db" --db=old_name
现在我们把数据库导出成一个名为old_name_dump.db
的文件。
如果要用新的名称进行恢复:
mongorestore --archive="old_name_dump.db" --nsFrom="old_name.*" --nsTo="new_name.*"
如果需要进行身份验证,请在命令中添加以下参数:
-u username --authenticationDatabase admin
mongodump --archive --db=old_name | mongorestore --archive --nsFrom='old_name.*' --nsTo='new_name.*'
- a_manfrinati{ renameCollection: "<source_namespace>", to: "<target_namespace>", dropTarget: <true|false>, writeConcern: <document> }
db.adminCommand({renameCollection: "db1.test1", to: "db2.test2"})
db1
下的所有集合,将其重命名为 db2
以实现重命名数据库名称。var source = "source";
var dest = "dest";
var colls = db.getSiblingDB(source).getCollectionNames();
for (var i = 0; i < colls.length; i++) {
var from = source + "." + colls[i];
var to = dest + "." + colls[i];
db.adminCommand({renameCollection: from, to: to});
}
使用此命令时要小心。
renameCollection 对目标命名空间有不同的性能影响。
如果目标数据库与源数据库相同,renameCollection 只会更改命名空间。这是一个快速操作。
如果目标数据库与源数据库不同,renameCollection 会将所有文档从源集合复制到目标集合。根据集合的大小,这可能需要更长的时间来完成。
bar
数据库中名为 foo
的集合具有命名空间 bar.foo
。 因此 _id
上的索引具有命名空间 bar.foo._id_
。 重命名集合(应该)在其知道的所有命名空间上执行前缀搜索和替换,类似于 mongorestore
的 --nsFrom
和 --nsTo
选项。 - amcgregorcopyDatabase
,但该功能在4.0中已被删除,不再是一个选项。我已经用我的笔记和怀疑更新了SERVER-701。mongodump
和mongorestore
之间进行一些操作:
导出数据时,要注意使用的“命名空间”。例如,在我的一个数据集中,我有一个带有命名空间byzmcbehoomrfjcs9vlj.Analytics
的集合——这个前缀(实际上是数据库名称)将在下一步中需要。
导入数据时,提供--nsFrom
和--nsTo
参数。(文档。) 继续以上假设(非常难读)的例子,为了恢复到一个更有意义的名称,我调用:
mongorestore --archive=backup.agz --gzip --drop \
--nsFrom 'byzmcbehoomrfjcs9vlj.*' --nsTo 'rita.*'
mongodump --archive --db=test | mongorestore --archive --nsFrom='test.*' --nsTo='examples.*'
- konkituse admin
db.runCommand({renameCollection: "[db_old_name].[collection_name]", to: "[db_new_name].[collection_name]"})
我尝试做。
db.copyDatabase('DB_toBeRenamed','Db_newName','host')
我得知它由Mongo社区已被废弃,虽然它可以创建备份或重命名数据库。
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
}
对于上述方法,我并不太满意,因此我不得不使用以下命令来获取本地Dump。
mongodump --host --db DB_TobeRenamed --out E://FileName/
已连接到数据库。
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
在 MongoDB 4.4 中已经不再使用。 - Dee
copyDatabase
命令也被弃用了。 - Sumit Ramteke