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> } )
コマンドフィールド
このコマンドには次のフィールドが含まれています。
フィールド | タイプ | 説明 |
---|---|---|
| string | 名前を変更するコレクションの名前空間。名前空間は、データベース名とコレクションの名前の組み合わせです。 |
| string | コレクションの新しい名前空間。新しい名前空間で別のデータベースが指定されている場合、 |
| ブール値 | 任意。 |
| ドキュメント | 任意。操作の書込み保証(write concern)を表現するドキュメント。デフォルトの書込み保証を使用する場合は省略します。 シャーディングされたシャーディングされたクラスターで発行すると、 |
| any | 任意。このコマンドに添付するユーザー指定のコメント。設定すると、このコメントは以下の場所にこのコマンドの記録と合わせて表示されます。
コメントには、有効な BSON 型(string, integer, object, array など)を使用できます。 |
動作
シャーディングされたコレクション
MongoDB 5.0以降では、 renameCollection
コマンドを使用してシャーディングされたコレクションの名前を変更できます。 ターゲット データベースはソース データベースと同じである必要があります。
シャーディングされていないコレクション
ソース データベースとターゲット データベースが同じプライマリ シャードにある限り、 renameCollection
を使用して、シャーディングされたクラスター内のシャーディングされていないコレクションの名前を変更できます。
時系列コレクション
renameCollection
を使用して時系列コレクションの名前を変更すること はできません 。詳細については「時系列コレクションの制限 」を参照してください。
既存のターゲット コレクション
renameCollection
target
が既存のコレクション の 名前で、 を指定しない場合、dropTarget: true
は失敗します。
パフォーマンス
バージョン 3.6 で変更。
renameCollection
は、ターゲットの名前空間に応じて異なるパフォーマンスへの影響を持ちます。
ターゲット データベースがソース データベースと同じ場合、 renameCollection
は名前空間のみを変更します。 これは高速な操作です。
ターゲット データベースがソース データベースと異なる場合、 renameCollection
はソース コレクションからターゲット コレクションにすべてのドキュメントをコピーします。 コレクションのサイズによっては、これが完了するまでの時間がかかる場合があります。
シャーディングされたクラスターでのリソース ロック
バージョン 5.0 での変更。
シャーディングされたクラスター内のシャーディングされたコレクションまたはシャーディングされていないコレクションの名前を変更すると、ソース コレクションとターゲット コレクションだけがすべてのシャードでロックされます。ソース コレクションとターゲット コレクションでのその後の操作は、名前変更操作が完了するまで待つ必要があります。
MongoDB でのロックの詳細については、「FAQ: 同時実行性」を参照してください。
レプリカセットでのリソース ロック
同じデータベース内のコレクションの名前を変更する場合、 renameCollection
は操作中にソース コレクションとターゲット コレクションに対して排他ロックを取得します。 コレクションに対する後続のすべての操作は、 renameCollection
が完了するまで待機する必要があります。
異なるデータベース間でコレクションの名前を変更する場合、 renameCollection
はターゲット データベースに対して排他(W)ロック、ソース データベースに対して意向共有(r)ロック、ソース コレクションに対して共有(S)ロックを取得します。 ターゲット データベースでのその後の操作は、 renameCollection
が排他データベース ロックを解放するまで待機する必要があります。
MongoDB でのロックの詳細については、「FAQ: 同時実行性」を参照してください。
local
Database
コレクションの名前を、複製されたデータベースから、複製されていない
local
データベースに変更することはできません。コレクションの名前を、複製されていない
local
データベースから複製されたデータベースに変更することはできません。
オープン カーソル
警告
db.collection.renameCollection()
メソッドとrenameCollection
コマンドは、現在データを返しているクエリを中断するオープン カーソルを無効にします。
変更ストリーム
Change Streamsの場合、db.collection.renameCollection()
メソッドと コマンドは、ソース コレクションまたはターゲットrenameCollection
Change Streams コレクションで開かれている既存の を 無効化 を作成します。
相互作用: mongodump
mongodump
--oplog
renameCollection
で開始された は、ダンプ プロセス中にクライアントが コマンドを発行すると失敗します。詳しくは、 mongodump.--oplog
を参照してください。
例
次の例では、test
データベース内の orders
という名前のコレクションの名前を、test
データベース内のコレクションの orders2014
に変更します。
db.adminCommand( { renameCollection: "test.orders", to: "test.orders2014" } )
mongosh
は、db.collection.renameCollection()
同じ データベース内のコレクションの名前を変更するための コマンドの ヘルパーを提供します。次の は、前の例と同等です。
use test db.orders.renameCollection( "orders2014" )