renameCollection
renameCollection
命令将集合重命名为存储配置中指定的新名称。 您只能对 admin
数据库运行此命令,这是Atlas user 身份验证数据库。 该命令不支持通过通配符集合函数( collectionName()
) 动态创建的集合进行重命名。
语法
db.runCommand({ "renameCollection": "<namespace>", "to": "<namespace>", "dropTarget": true|false })
字段
字段 | 类型 | 说明 | 必需? |
---|---|---|---|
| 字符串 | 集合命名空间,包括数据库名称、点 ( | 是 |
| 字符串 | 以命名空间形式指定的集合的新名称,其中包括数据库名称、点 (
| 是 |
| 布尔 | 指定是否将集合重命名为数据库中已经存在的名称。值可以是 | no |
输出
如果成功,该命令将返回以下输出。 您可以通过运行验证集合中的命令来验证结果。 如果失败,请参阅下面的“故障排除”以获取建议的解决方案。
{ "ok" : 1 }
示例
这些示例在存储配置中使用以下 databases
和collections
:
"databases" : [ { "name": "multiCollDB", "collections": [ { "name": "air_airlines", "dataSources": [{ "storeName" : "egS3Store", "path" : "egData/air_airlines.json" }] }, { "name": "airbnb", "dataSources": [{ "storeName" : "sampleS3Store", "path" : "json/airbnb/*" }] }, { "name": "weather", "dataSources": [{ "storeName" : "sampleS3Store", "path" : "json/weather/*" }] } ] } ]
基本示例
以下 renameCollection
命令将名为 multiCollDB
的数据库中的集合 air_airlines
重命名为 airlines
。
use admin db.runCommand({ "renameCollection": "multiCollDB.air_airlines", "to": "multiCollDB.airlines" })
上一个命令打印以下输出:
{ "ok" : 1 }
dropTarget
例子
以下 renameCollection
命令:
将名为
multiCollDB
的数据库中的weather
集合重命名为airbnb
,这是同一数据库中现有集合的名称。将
airbnb
集合数据替换为weather
集合中的数据。
use admin db.runCommand({ "renameCollection": "multiCollDB.weather", "to": "multiCollDB.airbnb", "dropTarget": true })
上一个命令打印以下输出:
{ "ok" : 1 }
以下命令显示集合已成功重命名:
> show collections airbnb > db.runCommand({ "storageGetConfig" : 1 }) { "ok" : 1, "storage" : { "stores" : [ { "name" : "egS3Store", "provider" : "s3", "region" : "us-east-2", "bucket" : "sbx-data-federation", "delimiter" : "/", "prefix" : "" } ], "databases" : [{ "name" : "multiCollDB", "collections" : [{ "name": "airbnb", "dataSources" : [ { "storeName" : "egS3Store", "path" : "/json/airbnb" } ] }] }] } }
验证集合
您可以运行以下任意命令来验证命令是否成功:
show collections db.runCommand({ "storageGetConfig" : 1 })
故障排除错误
如果命令失败,则返回以下错误之一:
{ "ok": 0, "errmsg": "renameCollection can only be run against the admin database", "code": 13, "codeName": "Unauthorized" }
解决方案:切换到 admin
数据库并重新运行命令。要切换到 admin
数据库,请运行 use admin
命令。
{ "ok": 0, "errmsg": "Invalid namespace specified '<ns>'", "code": 73, "codeName": "InvalidNamespace" }
解决方案:检查指定的命名空间(数据库或集合)在存储配置中是否存在。
{ "ok": 0, "errmsg": "Invalid target namespace: <namespace>", "code": 73, "codeName": "InvalidNamespace" }
解决方案:确保使用 to
字段指定的命名空间(数据库或集合)是有效的。
{ "ok": 0, "errmsg": "target namespace exists", "code": 48, "codeName": "NamespaceExists" }
解决方案:检查具有指定名称的集合是否尚不存在。集合名称在以下条件下必须是唯一的:dropTarget
被省略或设置为 false
。
{ "ok": 0, "errmsg": "source namespace does not exist", "code": 26, "codeName": "NamespaceNotFound" }
解决方案:检查数据库名称是否有效并且存在于存储配置中。
{ "ok": 0, "errmsg": "cannot rename a collection created from a wildcard", "code": 73, "codeName": "InvalidNamespace" }
解决方案:使用通配符集合函数 (collectionName()
) 创建的集合不能重命名。