Docs 主页 → 开发应用程序 → MongoDB Manual
renameCollection
定义
renameCollection
更改现有集合的名称。以完整
renameCollection
命名空间 (<database>.<collection>
) 的形式将集合名称指定为 。提示
在
mongosh
中,该命令也可以通过renameCollection()
辅助方法运行。助手方法对于
mongosh
用户来说很方便,但它们返回的信息级别可能与数据库命令不同。如果不追求方便或需要额外的返回字段,请使用数据库命令。
语法
该命令具有以下语法:
db.runCommand( { renameCollection: "<source_namespace>", to: "<target_namespace>", dropTarget: <true|false>, writeConcern: <document>, comment: <any> } )
命令字段
该命令包含以下字段:
字段 | 类型 | 说明 |
---|---|---|
renameCollection | 字符串 | 要重命名的集合的命名空间。命名空间是数据库名称和集合名称的组合。 |
to | 字符串 | 集合的新命名空间。如果新命名空间指定了不同的数据库,则 renameCollection 命令会将集合复制到新数据库并删除源集合。请参阅命名限制。 |
dropTarget | 布尔 | 可选。如果 true , mongod 将在重命名集合之前删除renameCollection 的target 。默认值为false 。 |
writeConcern | 文档 | 可选。表达该操作的写关注的文档。省略以使用默认的写关注。 在分片集群上发出时, 会将 命令及其帮助程序 |
comment | 注意到 | 可选。用户提供的待附加到该命令的注释。设置后,该注释将与该命令的记录一起出现在以下位置:
注释可以是任何有效的 BSON 类型(字符串、整型、对象、数组等)。 |
行为
分片集合
从 MongoDB 5开始。 0 ,可以使用renameCollection
命令更改分片集合的名称。目标数据库必须与源数据库相同。
未分片集合
只要源数据库和目标数据库位于同一主分片上,就可以使用renameCollection
重命名分片集群中的未分片集合。
时间序列集合
不能使用renameCollection
重命名时间序列集合。有关详细信息,请参阅时间序列集合限制。
现有目标集合
renameCollection
如果target
是现有集合的名称 并且 未指定dropTarget: true
,则 将失败。
性能
3.6 版本中的更改。
renameCollection
会对性能产生不同的影响,具体取决于目标命名空间。
如果目标数据库与源数据库相同, renameCollection
只需更改命名空间即可。这是一项快速操作。
如果目标数据库与源数据库不同, renameCollection
会将所有文档从源集合复制到目标集合。根据集合的大小,这可能需要更长的时间才能完成。
分片集群中的资源锁定
5.0 版本中的更改。
重命名分片集群中的分片集合或非分片集合时,源集合和目标集合都以独占方式锁定在每个分片上。对源集合和目标集合的后续操作必须等待重命名操作完成。
有关 MongoDB 中锁定的更多信息,请参阅常见问题解答:并发。
副本集中的资源锁定
版本 4.2 中进行了更改。
如果重命名同一数据库中的集合, renameCollection
将在操作期间获得源集合和目标集合的独占锁。对集合的所有后续操作都必须等到renameCollection
完成。
MongoDB 4之前的版本。 2 ,在使用renameCollection
的同一数据库中重命名集合时,需要独占数据库锁。
如果在不同数据库之间重命名集合, renameCollection
锁定行为取决于 MongoDB 版本:
对于 MongoDB 4 。 2 。在2及更高版本中,
renameCollection
会获取目标数据库上的独占 (W) 锁、源数据库上的意向共享 (R) 锁以及源集合上的共享 (S) 锁。对目标数据库的后续操作必须等到renameCollection
释放独占数据库锁。对于 MongoDB 4 。 2 。 1及更早版本中,
renameCollection
获得全局独占 (W) 锁。对mongod
的后续操作必须等到renameCollection
释放全局锁。
有关 MongoDB 中锁定的更多信息,请参阅常见问题解答:并发。
local
数据库
您无法将已复制数据库中的集合重命名为未复制的
local
数据库中的集合名称。您无法将未复制的
local
数据库中的集合重命名为已复制数据库中的集合名称。
打开游标
警告
db.collection.renameCollection()
方法和renameCollection
命令将使打开的游标失效,从而中断当前返回数据的查询。
Change Streams
对于 变更流 ,db.collection.renameCollection()
方法和 命令会为源集合或目标集合上打开的任何现有 变更流renameCollection
创建 无效 。
互动 mongodump
mongodump
--oplog
如果客户端在转储进程中发出renameCollection
命令,则使用 将失败。有关更多信息,请参阅mongodump.--oplog
。
例子
以下示例会将 test
数据库中名为 orders
的集合重命名为 test
数据库中的orders2014
。
db.adminCommand( { renameCollection: "test.orders", to: "test.orders2014" } )
mongosh
为该命令提供db.collection.renameCollection()
辅助程序,以重命名同一数据库中的集合。以下内容与前面的示例等效:
use test db.orders.renameCollection( "orders2014" )