renameCollection
¶更改现有集合的名称。renameCollection
以完整的名称空间(<database>.<collection>
)形式
指定集合名称。
renameCollection
对admin数据库发出命令
。
该命令采用以下形式:
该命令包含以下字段:
领域 | 类型 | 描述 |
---|---|---|
renameCollection |
串 | 要重命名的集合的名称空间。命名空间是数据库名称和集合名称的组合。 |
to |
串 | 集合的新名称空间。如果新名称空间指定了其他数据库,则该renameCollection 命令会将集合复制到新数据库,并删除源集合。请参阅命名限制。 |
dropTarget |
布尔值 | 可选的。如果true ,mongod 将掉落target 的
renameCollection ,以重命名收集前。默认值为false 。 |
writeConcern |
文献 | 可选的。表示 该操作的写关注点的文档。省略使用默认的写关注。 当分片群集上发出, 注意 您不能重命名分片集合。但是,您可以在分片群集中重命名未分片的集合。 |
renameCollection
是不是与分片集合兼容。
renameCollection
如果target
是现有集合的名称并且您不指定则失败。dropTarget: true
在版本3.6中更改。
renameCollection
根据目标名称空间,对性能有不同的影响。
如果目标数据库与源数据库相同,则
renameCollection
只需更改名称空间。这是一个快速的操作。
如果目标数据库与源数据库不同,则将
renameCollection
所有文档从源集合复制到目标集合。根据集合的大小,这可能需要更长的时间才能完成。
在版本4.2中进行了更改。
如果在同一数据库中重命名集合
renameCollection
,请在操作期间获得源集合和目标集合的排他锁。集合上的所有后续操作都必须等到
renameCollection
完成。
在MongoDB 4.2之前,renameCollection
需要使用独占数据库锁在同一数据库中重命名集合。
如果在不同数据库之间重命名集合,则
renameCollection
锁定行为取决于MongoDB版本:
renameCollection
在目标数据库上获得排他(W)锁,在源数据库上获得意图共享(r)锁,并在源集合上获得共享(S)锁。目标数据库上的后续操作必须等待,直到renameCollection
释放独占数据库锁。renameCollection
获取独占(W)全局锁。mongod
必须执行的后续操作
必须等到renameCollection
释放全局锁。有关锁定MongoDB的更多信息,请参阅FAQ:并发。
local
数据库¶local
为未复制的
数据库。local
未复制的数据库中的集合重命名为复制的数据库。警告
该db.collection.renameCollection()
方法和
renameCollection
命令将使打开的游标无效,该游标会中断当前正在返回数据的查询。
对于变更流,该
db.collection.renameCollection()
方法和
renameCollection
命令为
在源或目标集合上打开的任何现有变更流创建一个
无效事件。
mongodump
一mongodump
开始
--oplog
失败,如果一个客户的问题
renameCollection
在转储过程命令。请参阅以获取更多信息。mongodump --oplog
以下示例将数据库中命名的集合重命名orders
为
test
数据库orders2014
中的名称test
。
该mongo
外壳提供
db.collection.renameCollection()
帮助的命令将内重新命名集合相同的数据库。以下等效于先前的示例:
例外10026: | |
---|---|
如果source 名称空间不存在,则引发。 |
|
例外10027: | |
如果提出target 的命名空间存在,dropTarget 要么false 还是不确定的。 |
|
例外15967: | |
如果target 名称空间是无效的集合名称,则引发。 |