renameCollection
定义
renameCollection
更改现有集合的名称。将集合名称指定为
renameCollection
的完整命名空间 (<database>.<collection>
).提示
在
mongosh
,此命令还可以通过renameCollection()
辅助方法运行.辅助方法对
mongosh
用户来说很方便,但它们可能不会返回与数据库命令相同级别的信息。在不需要便利性或需要额外的返回字段的情况下,请使用数据库命令。对 管理员数据库 执行
renameCollection
命令。
兼容性
此命令可在以下环境中部署的部署中使用
MongoDB Atlas:云中 MongoDB 部署的完全托管服务
注意
此命令在所有 MongoDB Atlas 集群中都受支持。有关 Atlas 对所有命令的支持信息,请参阅 不受支持的命令。
MongoDB 企业版:基于订阅、自我管理的 MongoDB 版本
MongoDB 社区版:开源、免费使用、自我管理的 MongoDB 版本
语法
该命令具有以下语法
db.runCommand( { renameCollection: "<source_namespace>", to: "<target_namespace>", dropTarget: <true|false>, writeConcern: <document>, comment: <any> } )
命令字段
命令包含以下字段
字段 | 类型 | 描述 |
---|---|---|
renameCollection | string | 重命名集合时使用的命名空间。命名空间是数据库名和集合名的组合。 |
到 | string | 集合的新命名空间。如果新命名空间指定了不同的数据库,则 renameCollection 命令会将集合复制到新数据库,并删除源集合。请参阅命名限制。 |
dropTarget | boolean | |
writeConcern | document | 可选。一个文档,表示操作的 写关注。省略则使用默认写关注。 在分片集群上发出时, |
comment | any | 可选。用户提供的附加到此命令的注释。一旦设置,此注释将出现在以下位置的此命令记录旁边
注释可以是任何有效的 BSON 类型(字符串、整数、对象、数组等)。 |
行为
分片集合
从 MongoDB 5.0 开始,您可以使用 renameCollection
命令来更改分片集合的名称。目标数据库必须与源数据库相同。
非分片集合
只要源数据库和目标数据库具有相同的主分片,您就可以使用 renameCollection
在分片集群中重命名非分片集合。
时间序列集合
您不能使用renameCollection
来重命名时间序列集合。更多信息,请参阅时间序列集合限制。
现有目标集合
renameCollection
在target
是现有集合的名称,并且您没有指定dropTarget: true
时将失败。
性能
renameCollection
的性能影响取决于目标命名空间。
如果目标数据库与源数据库相同,renameCollection
只是更改命名空间。这是一个快速操作。
如果目标数据库与源数据库不同,renameCollection
将将所有文档从源集合复制到目标集合。根据集合的大小,这可能需要更长的时间才能完成。
分片集群中的资源锁定
已更改在版本5.0.
在分片集群中重命名分片或非分片集合时,源集合和目标集合在每个分片上都会被独占锁定。对源集合和目标集合的后续操作必须等待重命名操作完成。
有关MongoDB中锁的更多信息,请参阅 常见问题解答:并发。
副本集中的资源锁定
如果在同一数据库中重命名集合,renameCollection
将在操作期间对源集合和目标集合获得独占锁定。对集合的所有后续操作必须等待 renameCollection
完成。
如果在不同数据库之间重命名集合,renameCollection
将获得目标数据库的独占(W)锁,源数据库的意向共享(r)锁,以及源集合的共享(S)锁。对目标数据库的后续操作必须等待 renameCollection
释放独占数据库锁。
有关MongoDB中锁的更多信息,请参阅 常见问题解答:并发。
local
数据库
您不能将复制的数据库中的集合重命名为非复制的
local
数据库。您不能将非复制的
local
数据库中的集合重命名为复制的数据库。
打开游标和更改流
警告
使用 db.collection.renameCollection()
方法或 renameCollection
命令将使打开的游标失效。这将在源或目标集合上打开的任何现有 失效事件 对任何现有 更改流,并中断当前从重命名的集合返回数据的查询。
与 mongodump
的交互
使用带 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" )