AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

renameCollection(データベースコマンド)

renameCollection

既存のコレクションの名前を変更します。コレクション名を完全な名前空間(<database>.<collection>)の形式で renameCollection に指定します。

Tip

mongoshでは、このコマンドはrenameCollection() ヘルパーメソッドを通じて実行することもできます。

ヘルパー メソッドはmongosh ユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、データベースコマンド を使用します。

管理データベースに対して renameCollection コマンドを発行します。

このコマンドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでのMongoDB配置のためのフルマネージド サービスです

注意

このコマンドは、すべてのMongoDB Atlasクラスターでサポートされています。すべてのコマンドの Atlas サポートの詳細については、「 サポートされていないコマンド 」を参照してください。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

このコマンドの構文は、次のとおりです。

db.runCommand(
{
renameCollection: "<source_namespace>",
to: "<target_namespace>",
dropTarget: <true|false>,
writeConcern: <document>,
comment: <any>
}
)

このコマンドには次のフィールドが含まれています。

フィールド
タイプ
説明

renameCollection

string

名前を変更するコレクションの名前空間。名前空間は、データベース名とコレクションの名前の組み合わせです。

to

string

コレクションの新しい名前空間。新しい名前空間で別のデータベースが指定されている場合、renameCollection コマンドはコレクションを新しいデータベースにコピーし、ソースコレクションを削除します。詳細は、「名前付けの制限」を参照してください。

MongoDB Atlas配置では、atlasAdminロールによりrenameCollectionSameDB権限アクションのみが付与されるため、コレクションを別のデータベースに名前変更することはできません。

dropTarget

ブール値

オプション。true の場合、コレクションの名前を変更する前に、mongod は renameCollection の target を削除します。デフォルト値は false です。

writeConcern

ドキュメント

comment

any

任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。

コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。

MongoDB 5.0 以降では、renameCollection コマンドを使用してシャーディングされたコレクションの名前を変更できます。ターゲットデータベースはソースデータベースと同じである必要があります。

ソースデータベースとターゲットデータベースのプライマリシャードが同じであれば、renameCollection を使用してシャーディングされたクラスター内の非シャーディングコレクションの名前を変更できます。

renameCollection を使って時系列コレクションの名前を変更することはできません。詳細については「時系列コレクションの制限」を参照してください。

renameCollection は、target が既存のコレクションの名前で、かつ dropTarget: true を指定しない場合失敗します。

ソース コレクションでインデックス構築が実行中の場合、名前変更操作は BackgroundOperationInProgressForNamespace エラーで失敗します。対象コレクションでインデックス構築が進行中でおよび dropTarget: true を指定した場合にも、操作は失敗します。

コレクションの名前を変更するには、インデックス構築が完了するまで待機し、その後、操作を再試行してください。進行中のインデックス構築を確認するには、db.currentOp() メソッドを使用します。

renameCollection は、ターゲットの名前空間に応じて、異なるパフォーマンスへの影響があります。

ターゲットデータベースがソースデータベースと同じである場合、renameCollection は名前空間を変更します。この操作はすぐに実行されます。

ターゲットデータベースがソースデータベースと異なる場合、renameCollection はソースコレクションからターゲットコレクションにすべてのドキュメントをコピーします。コレクションのサイズによっては、完了まで時間がかかる場合があります。

バージョン5.0で変更。

シャーディングされたクラスター内のシャーディングされたコレクションまたはシャーディングされていないコレクションの名前を変更すると、ソース コレクションとターゲット コレクションだけがすべてのシャードでロックされます。ソース コレクションとターゲット コレクションでのその後の操作は、名前変更操作が完了するまで待つ必要があります。

MongoDB でのロックの詳細については、「FAQ: 同時実行性」を参照してください。

同じデータベース内のコレクションの名前を変更する場合、renameCollection は操作中にソースコレクションとターゲットコレクションに対して排他ロックを取得します。コレクションでの後続のすべての操作は、renameCollection が完了するまで待機する必要があります。

MongoDB 8.0.35 以降、異なるデータベース間でコレクションの名前を変更する場合、renameCollection は操作中にソースコレクションとターゲットコレクションに対して排他ロックを取得します。DDL 操作と書き込み (write)は、ソース コレクションとターゲット コレクションでの renameCollection が完了するまで待つ必要があります。ほとんどの読み取り操作は、ロックフリー読み取りを使用し、ブロックされません。

8.0.35 より前のバージョンの場合、クロスデータベース名前変更中、renameCollection はコピーフェーズ中にソースコレクションに対して共有(S)ロックのみを保持し、名前変更が完了する前にロックを解除しました。

ロックの変更は、レプリカセットのみに影響します。このページの冒頭で説明したように、シャーディングされたクラスターは、名前変更の期間中、両方のコレクションを既にロックしています。

MongoDB でのロックの詳細については、「FAQ: 同時実行性」を参照してください。

  • コレクションの名前を、複製されたデータベースから、複製されていない local データベースに変更することはできません。

  • コレクションの名前を、複製されていない local データベースから複製されたデータベースに変更することはできません。

警告

db.collection.renameCollection()メソッドとrenameCollection コマンドは、オープン カーソルを無効にします。これにより、 ソース コレクション または ターゲットコレクションで開かれている既存の変更ストリームの 無効化イベントが作成され、名前が変更されたコレクションから現在データを返しているクエリも中断されます。

mongodump--oplogrenameCollectionで開始された は、ダンプ プロセス中にクライアントが コマンドを発行すると失敗します。詳しくは、mongodump.--oplog を参照してください。

次の例では、test データベース内の orders という名前のコレクションの名前を、test データベース内のコレクションの orders2014 に変更します。

db.adminCommand( { renameCollection: "test.orders", to: "test.orders2014" } )

mongoshdb.collection.renameCollection()は、同じデータベース内のコレクションの名前を変更するための コマンドの ヘルパーを提供します。次の は、前の例と同等です。

use test
db.orders.renameCollection( "orders2014" )