MongoDB の同じデータベース内のコレクションをコピーする
- MongoDB での作業中に、同じデータベース内のコレクションをコピーする
-
mongodump
とmongorestore
を使用して、MongoDB の同じデータベース内のコレクションをコピーする -
aggregate()
メソッドを使用して、MongoDB の同じデータベース内のコレクションをコピーする -
forEach()
ループを使用して、MongoDB の同じデータベース内のコレクションをコピーする
同じデータベース内のコレクションをコピーするのは素晴らしい作業です。時間と労力を節約できます。このチュートリアルでは、mongodump
、mongorestore
、aggregate()
、および forEach()
を使用して、MongoDB を使用して同じデータベース内のコレクションをコピーする方法を示します。
MongoDB での作業中に、同じデータベース内のコレクションをコピーする
古いバージョンの MongoDB、たとえば 3.0 未満では、copyTo()
メソッドを db.collection_name.copyTo()
として使用してコレクションをコピーできましたが、現在は非推奨です。
eval
も MongoDB バージョン 4.2 の開始に伴い廃止されました。db.collection_name.copyTo()
は eval
をラップすることに注意してください。つまり、MongoDB バージョン 4.2 以降を使用している場合、どちらかを使用してコレクションをコピーすることはできません。
MongoDB の新しいバージョンには、同じデータベース内のコレクションをコピーするために使用できる他のいくつかの方法があります。それらのいくつかをここに示します。
mongodump
およびmongorestore
コマンドを使用しますaggregate()
メソッドを使用しますforEach()
ループを使用します
それぞれを一つずつ学び始めましょう。
mongodump
と mongorestore
を使用して、MongoDB の同じデータベース内のコレクションをコピーする
これは、MongoDB データベースツールを使用して同じデータベース内のコレクションを複製/コピーするための最速の方法です。特に、mongodump
と mongorestore
を使用できます。データベースツールは、MongoDB で作業するための一連のコマンドラインユーティリティです。
Windows コマンドプロンプトで次のコマンドを使用して、mongodump
と mongorestore
のバージョンを確認できます。それぞれのバージョンが正常に返されると、データベースツールがインストールされます。
それ以外の場合は、ここに従ってデータベースツールをインストールします。
サンプルコード:
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つずつターゲットコレクションに挿入します。