MongoDBでコレクションを別のデータベースにコピーする方法【具体例つきで解説】
MongoDBでコレクションを別のデータベースにコピーする方法
MongoDBには、あるデータベースから別のデータベースへコレクションを一括でコピーする専用のコマンドは用意されていません。その代わり、find()メソッドとforEach()、さらにgetSiblingDB()メソッドを組み合わせることで、コレクション内のドキュメントを別のデータベースへ複製できます。
基本となる構文
以下の構文を使用します。
db.yourCollectionName.find().forEach(function(yourVariableName){
db.getSiblingDB('yourDestinationDatabase')['yourCollectionName'].insert(yourVariableName);
});
この構文では、元のコレクションから全ドキュメントを取得し、1件ずつコピー先のデータベースに挿入していきます。
実例:testデータベースからsampleデータベースへコピーする
ここでは、testデータベースに作成したコレクションを、「sample」という名前の別のデータベースへコピーする流れを順番に見ていきましょう。
ステップ1:testデータベースにコレクションを作成する
まず、ドキュメントを含むコレクションを作成します。以下のクエリを実行してください。
<test>
> use test
switched to db test
> db.copyThisCollectionToSampleDatabaseDemo.insertOne({"User_Id":101,"UserName":"Larry"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c77ad622386c62d05142a67")
}
> db.copyThisCollectionToSampleDatabaseDemo.insertOne({"User_Id":102,"UserName":"Maxwell"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c77ad6e2386c62d05142a68")
}
> db.copyThisCollectionToSampleDatabaseDemo.insertOne({"User_Id":103,"UserName":"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c77ad7c2386c62d05142a69")
}
ステップ2:登録したドキュメントを確認する
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみましょう。
> db.copyThisCollectionToSampleDatabaseDemo.find().pretty();
出力結果は以下の通りです。
{
"_id" : ObjectId("5c77ad622386c62d05142a67"),
"User_Id" : 101,
"UserName" : "Larry"
}
{
"_id" : ObjectId("5c77ad6e2386c62d05142a68"),
"User_Id" : 102,
"UserName" : "Maxwell"
}
{
"_id" : ObjectId("5c77ad7c2386c62d05142a69"),
"User_Id" : 103,
"UserName" : "Robert"
}
ステップ3:sampleデータベースの状態を確認する
次に、sampleデータベースに「copyThisCollectionToSampleDatabaseDemo」という名前のコレクションが存在するかどうかを確認します。
<sample>
> use sample; switched to db sample > show collections;
出力結果:
deleteDocuments deleteDocumentsDemo deleteInformation employee internalArraySizeDemo sourceCollection updateInformation userInformation
この時点では、「copyThisCollectionToSampleDatabaseDemo」というコレクションはまだ存在していません。
ステップ4:コレクションをコピーする
それでは、testデータベースからsampleデータベースへコレクションをコピーします。以下のクエリを実行してください。
> use test;
switched to db test
> db.copyThisCollectionToSampleDatabaseDemo.find().forEach(function(send){
db.getSiblingDB('sample')['copyThisCollectionToSampleDatabaseDemo'].insert(send); });
ステップ5:コピー結果を確認する
もう一度sampleデータベースを確認し、コレクションが正常にコピーされたかどうかチェックしましょう。
> use sample; switched to db sample > show collections;
出力結果:
copyThisCollectionToSampleDatabaseDemo deleteDocuments deleteDocumentsDemo deleteInformation employee internalArraySizeDemo sourceCollection updateInformation userInformation
出力結果を見ると、「copyThisCollectionToSampleDatabaseDemo」コレクションがsampleデータベースに新しく追加されていることがわかります。もちろん、元のtestデータベース側にも同じコレクションがそのまま残っています。
補足:他のコピー手段との比較
なお、MongoDB 4.0以前にはcopyCollectionやcloneCollectionといったコマンドも存在しましたが、現在では非推奨または削除されています。forEach()とgetSiblingDB()を組み合わせた上記の方法は、バージョンに依存せず利用できる汎用的な手法です。また、ドキュメント数が非常に多い場合は、mongodump/mongorestoreなどのツールを使った方が効率的にコピーできる場合もありますので、用途に応じて使い分けるとよいでしょう。
-
Pythonモジュールを別のシステムにコピー・移行する方法【pip freezeの使い方】
はじめにPythonの開発環境を別のマシンに移したい場合、モジュール(パッケージ)の移行方法は大きく分けて2つのケースがあります。自分で作成したモジュールを移すケースと、pipなどでインストールした外部モジュールを移すケースです。それぞれ適切な方法を理解しておくと、環境構築の手間やトラブルを大幅に減らせます。 ケース1:自作モジュールをコピーする場合自分で作成したPythonモジュール(.pyファイル)であれば、特別な手順は不要です。ファイルをそのままコピーし、Pythonがインストールされている別のシステム上に置けば、そのまま実行できます。 ケース2:インストール済みモジュールを移行する場合
-
Redis MOVEコマンドの使い方 – キーを別のデータベースへ移動する方法
このチュートリアルでは、Redisデータストア上でキーをあるデータベースから別のデータベースへ移動する方法を解説します。キーの移動には、redis-cliで使用できるMOVEコマンドを利用します。 MOVEコマンドは、現在選択されているデータベース(ソース)から指定したキーを削除し、そのキーを移動先(デスティネーション)のデータベースに挿入するために使用されます。なお、以下の場合は操作が実行されず、戻り値として0が返されます。 指定したキーがソースデータベースに存在しない場合 同じ名前のキーがすでに移動先のデータベースに存在する場合 構文 Redis MOVEコマンドの基本構文は以下のとお