Docs 菜单
Docs 主页
/
MongoDB Atlas
/ / /

renameCollection

在此页面上

  • 语法
  • 字段
  • 输出
  • 示例
  • 基本示例
  • dropTarget 例子
  • 验证集合
  • 故障排除错误

renameCollection命令将集合重命名为存储配置中指定的新名称。 您只能对 admin数据库运行此命令,这是Atlas user 身份验证数据库。 该命令不支持通过通配符集合函数( collectionName() ) 动态创建的集合进行重命名。

db.runCommand({ "renameCollection": "<namespace>", "to": "<namespace>", "dropTarget": true|false })
字段
类型
说明
必需?

renameCollection

字符串

集合命名空间,包括数据库名称、点 ( . ) 分隔符和集合名称。 示例: <database>.<collection>

to

字符串

命名空间形式指定的集合的新名称,其中包括数据库名称、点 ( . ) 分隔符和新集合名称。 新名称:

  • 在以下条件下必须是唯一的:dropTarget 被省略或设置为 false

  • 可以是同一数据库中现有集合的名称,前提是指定了 dropTarget 并且将其设置为 true(即 dropTarget == true)。

dropTarget

布尔

指定是否将集合重命名为数据库中已经存在的名称。值可以是 truefalse。默认值为 false,这意味着集合的新名称必须是唯一的。如果为 true,则会使用重命名集合中的数据覆盖现有集合的数据。

no

如果成功,该命令将返回以下输出。 您可以通过运行验证集合中的命令来验证结果。 如果失败,请参阅下面的“故障排除”以获取建议的解决方案。

{ "ok" : 1 }

这些示例在存储配置中使用以下 databasescollections

"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 }

以下 renameCollection 命令:

  1. 将名为 multiCollDB 的数据库中的 weather 集合重命名为 airbnb,这是同一数据库中现有集合的名称。

  2. 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()) 创建的集合不能重命名。

后退

添加集合和视图