MongoDB の同じデータベース内のコレクションをコピーする

Mehvish Ashiq 2023年1月30日
  1. MongoDB での作業中に、同じデータベース内のコレクションをコピーする
  2. mongodumpmongorestore を使用して、MongoDB の同じデータベース内のコレクションをコピーする
  3. aggregate() メソッドを使用して、MongoDB の同じデータベース内のコレクションをコピーする
  4. forEach() ループを使用して、MongoDB の同じデータベース内のコレクションをコピーする
MongoDB の同じデータベース内のコレクションをコピーする

同じデータベース内のコレクションをコピーするのは素晴らしい作業です。時間と労力を節約できます。このチュートリアルでは、mongodumpmongorestoreaggregate()、および forEach() を使用して、MongoDB を使用して同じデータベース内のコレクションをコピーする方法を示します。

MongoDB での作業中に、同じデータベース内のコレクションをコピーする

古いバージョンの MongoDB、たとえば 3.0 未満では、copyTo() メソッドを db.collection_name.copyTo() として使用してコレクションをコピーできましたが、現在は非推奨です。

eval も MongoDB バージョン 4.2 の開始に伴い廃止されました。db.collection_name.copyTo()eval をラップすることに注意してください。つまり、MongoDB バージョン 4.2 以降を使用している場合、どちらかを使用してコレクションをコピーすることはできません。

MongoDB の新しいバージョンには、同じデータベース内のコレクションをコピーするために使用できる他のいくつかの方法があります。それらのいくつかをここに示します。

  1. mongodump および mongorestore コマンドを使用します
  2. aggregate() メソッドを使用します
  3. forEach() ループを使用します

それぞれを一つずつ学び始めましょう。

mongodumpmongorestore を使用して、MongoDB の同じデータベース内のコレクションをコピーする

これは、MongoDB データベースツールを使用して同じデータベース内のコレクションを複製/コピーするための最速の方法です。特に、mongodumpmongorestore を使用できます。データベースツールは、MongoDB で作業するための一連のコマンドラインユーティリティです。

Windows コマンドプロンプトで次のコマンドを使用して、mongodumpmongorestore のバージョンを確認できます。それぞれのバージョンが正常に返されると、データベースツールがインストールされます。

それ以外の場合は、ここに従ってデータベースツールをインストールします。

サンプルコード:

C:/Users/Dell> mongodump --version

サンプルコード:

C:/Users/Dell> mongorestore --version

システムのコマンドラインから mongodump および mongorestore コマンドを実行する必要があることを忘れないでください。たとえば、Ubuntu を使用している場合は、WindowsOS またはターミナルからのコマンドプロンプトです。このコマンドを mongo シェルから実行しないでください。

MongoDBで作業するためのデータベースツールを入手したら、同じデータベース内の teachers コレクションをダンプするために、以下のコマンドを実行してください: test.

サンプルコード:

C:/Users/Dell> mongodump -d test -c teachers

出力:

2022-05-27T13:05:14.497+0500    writing test.teachers to dump\test\teachers.bson
2022-05-27T13:05:14.503+0500    done dumping test.teachers (3 documents)

上記の出力は、ダンプファイルが dump\test\teachers.bson に書き込まれていることを示しています。したがって、以下のコマンドを使用して復元する必要があります。

サンプルコード:

C:/Users/Dell>mongorestore -d test -c teachers1 --dir=dump/<db>/<sourcecollection.bson>

出力:

2022-05-27T13:05:28.085+0500    checking for collection data in dump\test\teachers.bson
2022-05-27T13:05:28.088+0500    reading metadata for test.teachers1 from dump\test\teachers.metadata.json
2022-05-27T13:05:28.252+0500    restoring test.teachers1 from dump\test\teachers.bson
2022-05-27T13:05:28.312+0500    finished restoring test.teachers1 (3 documents, 0 failures)
2022-05-27T13:05:28.312+0500    no indexes to restore for collection test.teachers1
2022-05-27T13:05:28.313+0500    3 document(s) restored successfully. 0 document(s) failed to restore.

出力は上記のようになります。これは、コレクションが正常にコピーされたことを意味します。teachers1 という名前のターゲットコレクションは、現在のデータベースに存在しない場合に作成されます。

次に、mongo シェルを開き、次のクエリを実行して、コピーされたコレクションがそこにあるかどうかを確認します。

サンプルコード:

> show collections

出力:

teachers
teachers1

または、mongoexport を使用してコレクション(teachers)をデータベース(test)からエクスポートし、mongoimport を使用して同じデータベース内の teachers2 コレクションにインポートすることもできます。

サンプルコード:

C:/Users/Dell> mongoexport -d test -c teachers | mongoimport -d test -c teachers2 --drop

aggregate() メソッドを使用して、MongoDB の同じデータベース内のコレクションをコピーする

サンプルコード:

> db.teachers.aggregate([{$out: "teachers3"}])

このコマンドは、mongo シェルを使用して実行されます。その後、show collections コマンドを使用して teachers3 が存在するかどうかを確認します。

サンプルコード:

> show collections

出力:

teachers
teachers1
teachers2
teachers3

teachers コレクションからデータを返し、指定されたコレクション(ここでは teachers3)に書き込む集約パイプラインを使用しています。MongoDB バージョン 4.4 以降を使用している場合は、このアプローチを使用できます。

forEach() ループを使用して、MongoDB の同じデータベース内のコレクションをコピーする

サンプルコード:

> db.teachers.find().forEach((doc) => {
    db.teachers4.insert(doc)
  })

次のクエリを使用して、teachers4 が同じデータベース内にあることを確認します。

サンプルコード:

> show collections

出力:

teachers
teachers1
teachers2
teachers3
teachers4

この方法は、ループを使用するため、上記のすべてのアプローチに比べて最も時間がかかります。ソースコレクションのすべてのドキュメントを繰り返し処理し、それらを 1つずつターゲットコレクションに挿入します。

著者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

関連記事 - MongoDB Collection