文档菜单
文档首页
/
MongoDB 手册
/ / /

renameCollection

本页内容

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 行为
  • 示例
renameCollection

更改现有集合的名称。将集合名称指定为 renameCollection 的完整命名空间 (<database>.<collection>).

提示

mongosh,此命令还可以通过 renameCollection() 辅助方法运行.

辅助方法对 mongosh 用户来说很方便,但它们可能不会返回与数据库命令相同级别的信息。在不需要便利性或需要额外的返回字段的情况下,请使用数据库命令。

管理员数据库 执行 renameCollection 命令。

此命令可在以下环境中部署的部署中使用

  • MongoDB Atlas:云中 MongoDB 部署的完全托管服务

注意

此命令在所有 MongoDB Atlas 集群中都受支持。有关 Atlas 对所有命令的支持信息,请参阅 不受支持的命令。

该命令具有以下语法

db.runCommand(
{
renameCollection: "<source_namespace>",
to: "<target_namespace>",
dropTarget: <true|false>,
writeConcern: <document>,
comment: <any>
}
)

命令包含以下字段

字段
类型
描述
renameCollection
string
重命名集合时使用的命名空间。命名空间是数据库名和集合名的组合。
string
集合的新命名空间。如果新命名空间指定了不同的数据库,则 renameCollection 命令会将集合复制到新数据库,并删除源集合。请参阅命名限制。
dropTarget
boolean
可选。如果设置为 true,则 mongod 将在重命名集合之前删除 target。默认值是 false
writeConcern
document

可选。一个文档,表示操作的 写关注。省略则使用默认写关注。

在分片集群上发出时,mongosrenameCollection 命令及其辅助 db.collection.renameCollection()写关注 转换为 "majority"

comment
any

可选。用户提供的附加到此命令的注释。一旦设置,此注释将出现在以下位置的此命令记录旁边

注释可以是任何有效的 BSON 类型(字符串、整数、对象、数组等)。

从 MongoDB 5.0 开始,您可以使用 renameCollection 命令来更改分片集合的名称。目标数据库必须与源数据库相同。

只要源数据库和目标数据库具有相同的主分片,您就可以使用 renameCollection 在分片集群中重命名非分片集合。

不能使用renameCollection来重命名时间序列集合。更多信息,请参阅时间序列集合限制。

renameCollectiontarget是现有集合的名称,并且您没有指定dropTarget: true时将失败。

renameCollection的性能影响取决于目标命名空间。

如果目标数据库与源数据库相同,renameCollection只是更改命名空间。这是一个快速操作。

如果目标数据库与源数据库不同,renameCollection 将将所有文档从源集合复制到目标集合。根据集合的大小,这可能需要更长的时间才能完成。

已更改在版本5.0.

在分片集群中重命名分片或非分片集合时,源集合和目标集合在每个分片上都会被独占锁定。对源集合和目标集合的后续操作必须等待重命名操作完成。

有关MongoDB中锁的更多信息,请参阅 常见问题解答:并发。

如果在同一数据库中重命名集合,renameCollection 将在操作期间对源集合和目标集合获得独占锁定。对集合的所有后续操作必须等待 renameCollection 完成。

如果在不同数据库之间重命名集合,renameCollection 将获得目标数据库的独占(W)锁,源数据库的意向共享(r)锁,以及源集合的共享(S)锁。对目标数据库的后续操作必须等待 renameCollection 释放独占数据库锁。

有关MongoDB中锁的更多信息,请参阅 常见问题解答:并发。

  • 您不能将复制的数据库中的集合重命名为非复制的 local 数据库。

  • 您不能将非复制的 local 数据库中的集合重命名为复制的数据库。

警告

使用 db.collection.renameCollection() 方法或 renameCollection 命令将使打开的游标失效。这将在源或目标集合上打开的任何现有 失效事件 对任何现有 更改流,并中断当前从重命名的集合返回数据的查询。

使用带 mongodump--oplog 选项启动时,如果在备份数据过程中客户端执行了 renameCollection 命令,则会导致失败。有关更多信息,请参阅 mongodump.--oplog

以下示例将 test 数据库中的 orders 集合重命名为 orders2014

db.adminCommand( { renameCollection: "test.orders", to: "test.orders2014" } )

mongosh 为在 同一 数据库中重命名集合提供了 db.collection.renameCollection() 辅助函数。以下示例与上一个示例等价

use test
db.orders.renameCollection( "orders2014" )

返回

removeQuerySettings