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 のバージョン

MongoDB 8.1 以降、Stable API V1 に renameCollection が含まれています。Stable APIで renameCollection を使用するには、 MongoDB 8.1 以降を実行中配置にドライバーを接続する必要があります。

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

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

ドキュメント

任意。操作の書込み保証(write concern)を表現するドキュメント。デフォルトの書込み保証を使用する場合は省略します。

シャードされたクラスターで発行されると、 は、mongos コマンドとそのヘルパーrenameCollection の 書込み保証db.collection.renameCollection() (write concern)"majority" を. に変換します。

comment

any

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

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

シャーディングされたコレクションの名前を変更するには、renameCollection コマンドを使用します。ターゲットデータベースはソースデータベースと同じである必要があります。この操作、すべてのインデックスが保持されます。

ソース データベースとターゲット データベースが同じプライマリシャード を持っている場合は、renameCollection を使用してシャーディングされたクラスター内のシャーディングされていないコレクションの名前を変更できます。renameCollection を実行して同じデータベース内のコレクションの名前を変更すると、操作コレクションデータとインデックスが保持されます。別のデータベースに対して renameCollection を実行すると、この操作コレクションデータとインデックスが新しいファイルに書き換えられます。

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

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

ソースコレクションでインデックス構築が進行中の場合、名前変更操作は失敗し、BackgroundOperationInProgressForNamespace エラーが発生します。ターゲットコレクションでインデックス構築が進行中で、dropTarget: true を指定した場合、操作も失敗します。

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

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

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

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

バージョン5.0で変更。

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

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

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

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

8.3.12 より前のバージョンでは、クロスデータベースの名前変更中に、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" )