MongoDB でデータベースをコピー/クローンする

Tahseen Tauseef 2023年6月20日
  1. db.collection.copyTo() コマンドを使用して、MongoDB でデータベースをコピー/クローンする
  2. db.collection.find().forEach() コマンドを使用して、MongoDB でデータベースをコピー/クローンする
  3. mongodump および mongorestore ツールを使用して、MongoDB のデータベースをコピー/クローンする
  4. mongoexport および mongoimport ツールを使用して、MongoDB のデータベースをコピー/クローンする
  5. NoSQL Manager for MongoDBの重複収集ツール
  6. MongoDB の NoSQL Manager の別のデータベース ツールへのコレクションのコピー
MongoDB でデータベースをコピー/クローンする

ユーザーがコレクションを同じ MongoDB データベース内または別の MongoDB データベースに複製するには、いくつかの方法があります。 この MongoDB チュートリアル記事では、ユーザーが MongoDB のデータベースとそのデータをコピー/クローンする方法について説明します。

db.collection.copyTo() コマンドを使用して、MongoDB でデータベースをコピー/クローンする

このコマンドは、サーバーサイド JavaScript を使用して、すべてのドキュメントを collection から newCollection にコピーします。 コレクションが存在しない場合、MongoDB は新しいコレクションを生成します。

許可が有効になっている場合、db.collection.copyTo() を実行するには、すべてのリソースに対してすべてのアクションが必要です。 ビジネスでユーザーが db.collection.copyTo() を実行する必要がある場合は、anyResourceanyAction を付与するロールを作成します。

このロールを他のユーザーに割り当てることはできません。

パラメータ タイプ 説明
newCollection データが書き込まれるコレクションの名前。

db.collection.copyTo() を使用しているときにフィールド タイプをチェックして、BSON から JSON への変換中に操作によってドキュメントからタイプ情報が削除されないことを確認します。

内部的には、eval コマンドは db.collection.copyTo() メソッドによって使用されます。 その結果、db.collection.copyTo() 操作はグローバル ロックを取得し、db.collection.copyTo() 操作が終了するまで他の読み取りまたは書き込みアクティビティを防止します。

コピーされたドキュメントの数は copyTo() によって返されます。 コピーが失敗すると、例外がスローされます。 copyTo()eval を内部的に使用するため、mongod インスタンスのコピー アクションは他のすべての操作をブロックします。

たとえば、次の操作は、すべてのドキュメントを source コレクションから target コレクションにコピーします。

db.collection1.copyTo("collection2")
  1. このコマンドは、MongoDB 4.0 以前のバージョンでのみ実行できます。
  2. コレクションを同じデータベースにのみ複製します。
  3. 非常に遅い。
  4. コレクションのプロパティとインデックスはコピーしません。

db.collection.find().forEach() コマンドを使用して、MongoDB でデータベースをコピー/クローンする

このコマンドは、カーソルを反復処理し、JavaScript 関数を各ドキュメントに適用します。 forEach() メソッドのプロトタイプ形式は次のとおりです。

db.collection.find().forEach(<function>)

forEach() メソッドには次のパラメーターがあります。

パラメータ タイプ 説明
function JavaScript カーソルから各ドキュメントに適用する JavaScript 関数。 <function> 署名には、処理する現在のドキュメントに渡される単一の引数が含まれています.

例:

db.collection1.find().forEach(
function(docs){
db.collection2.insert(docs);
})
  1. このコマンドは、コレクションを同じサーバーにのみ複製できます。
  2. 非常に遅い。
  3. コレクションのプロパティとインデックスはコピーしません。

mongodump および mongorestore ツールを使用して、MongoDB のデータベースをコピー/クローンする

以前のバージョンの MongoDB でデータベースを複製するには、copyDB コマンドまたはそのヘルパー メソッド db.copyDatabase() を使用できます。 しかし、MongoDB はその後これらを非推奨にしました。

また、バージョン 4.2 から MongoDB は copydb コマンドと db.copyDatabase() メソッドを削除したため、MongoDB 4.2 以降を使用している場合はそれらを利用できなくなりました。 ただし、MongoDB データベースを複製する別の方法があります。

MongoDB データベース ツールを使用して、MongoDB でデータベースを複製できます。 コマンド mongodump および mongorestore を使用できます。

MongoDB データベース ツールは、MongoDB を処理するためのコマンド ライン ツールのコレクションです。 MongoDB データベース ツールがインストールされているかどうかわからない場合は、ターミナルまたはコマンド プロンプトを使用して以下を確認してください。

mongodump --version
mongorestore --version

このコードは、主に mongodumpmongorestore. のバージョンを探します。 まだお持ちでない場合は、MongoDB Web サイトにあるインストール手順に従って、MongoDB データベース ツールを PC にインストールできます。

mongodumpmongorestore を実行するには、システムのコマンド ラインを使用する必要があります (たとえば、新しいターミナルまたはコマンド プロンプト ウィンドウ)。 mongo シェルから実行しないでください。

データベースの複製コードの例を次に示します。

mongodump --archive --db=CatHotel | mongorestore --archive  --nsFrom='CatHotel.*' --nsTo='CatHouse.*'

この場合、CatHotel データベースをバックアップしてから、そのすべてのコレクションを CatHouse というデータベースに復元します。 つまり、CatHotel データベースを CatHouse として複製しました。

これは、mongodump を使用してデータベース バックアップ ファイルを生成し、続いて mongorestore を使用してデータベースを新しい名前で復元します。 まず、データベースが標準出力ストリームにダンプされ、mongorestoreにパイプされました。

各パラメーターの機能は次のとおりです。

パラメータ 説明
archive アーカイブ ファイルが指定されていない場合は、指定されたアーカイブ ファイルまたは標準出力 (stdout) に出力が書き込まれます。 あなたの場合、アーカイブファイルは指定されていないため、標準出力に書き込まれます。
db バックアップするデータベースを指定します。 この場合、CatHotel データベースをバックアップします。
nsFrom ダンプ ファイルでコレクションを指定します。 アスタリスク ワイルドカード (*) は、すべてのコレクションを意味します。
nsTo 復元されたデータベースで使用する必要があるコレクション名を指定します。

mongodump を使用してすべてのデータベースをダンプし、パラメーターなしで実行することもできます。 ただし、その場合、local および config データベースはダンプに含まれません。

  1. 高速方式です。
  2. コレクションを別のデータベースおよびサーバーに複製できます。

mongoexport および mongoimport ツールを使用して、MongoDB のデータベースをコピー/クローンする

MongoDB ツール パッケージには、mongoexport および mongoimport ツールが含まれています。 ツール パッケージは、MongoDB ダウンロード センターからダウンロードできます。

たとえば、コマンド ラインで次のコマンドを実行します。

mongoexport.exe /host:<host> /port:<port> /db:test /collection:collection1 /out:collection1.json
mongoimport.exe /host:<host> /port:<port> /db:test /collection:collection2 /file:collection1.json
  1. 高速な方法です。
  2. コレクションを別のデータベースとサーバーに複製できます。
  3. コレクションのプロパティとインデックスはコピーしません。

NoSQL Manager for MongoDBの重複収集ツール

コレクションの複製は専門的な機能です。 同じデータベース内でコレクションを非常に迅速に複製できます。

DB エクスプローラーで collection1 コレクションを右クリックし、ポップアップ メニューで [複製 collection1 コレクション アイテム] を選択します。

重複コレクション

コピー先のコレクション名と複製パラメーターを指定し、[複製] をクリックします。

重複コレクション 1

  1. 高速方式です。
  2. コレクションのプロパティとインデックスをコピーします。
  3. コレクションを同じデータベースにのみ複製できます。

MongoDB の NoSQL Manager の別のデータベース ツールへのコレクションのコピー

コレクションを別のデータベースにコピーすることは、NoSQL Manager for MongoDB Pro の専門的な機能です。 データベースとサーバー間で 1つまたは複数のコレクションをコピーできます。

DB エクスプローラーで collection1 を右クリックし、ポップアップ メニューで collection1 コレクションを別のデータベース項目にコピー を選択します。

複製コレクション 2

宛先データベースと追加のパラメーターを指定し、[実行] をクリックします。

重複コレクション 3

  1. 高速な方法です。
  2. コレクションのプロパティとインデックスをコピーします。
  3. コレクションを別のデータベースおよびサーバーにコピーできます。
  4. 一度に複数のコレクションをコピーできます。
  5. コレクションの名前を変更できません。

関連記事 - MongoDB Database