renameCollection
renameCollection
コマンドは、コレクションの名前を、ストレージ構成で指定された新しい名前に変更します。 このコマンドは、 Atlas user 認証データベースである admin
データベースに対してのみ実行できます。 コマンドは、 ワイルドカード コレクション関数( collectionName()
)によって動的に作成されたコレクションの名前変更をサポートしていません。
構文
db.runCommand({ "renameCollection": "<namespace>", "to": "<namespace>", "dropTarget": true|false })
フィールド
フィールド | タイプ | 説明 | 必須 |
---|---|---|---|
renameCollection | string | はい | |
to | string | 名前空間として指定されたコレクションの新しい名前。データベース名、ドット(
| はい |
dropTarget | ブール値 | コレクションの名前を、データベースに既に存在する名前に変更するかどうかを指定します。 値は true またはfalse です。 デフォルト値はfalse であり、コレクションの新しい名前は一意である必要があることを意味します。 true の場合、 は既存のコレクションのデータを、名前が変更されたコレクションのデータで上書きします。 | 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()
)によって作成されたコレクションの名前は変更できません。