MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

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以前にはcopyCollectioncloneCollectionといったコマンドも存在しましたが、現在では非推奨または削除されています。forEach()getSiblingDB()を組み合わせた上記の方法は、バージョンに依存せず利用できる汎用的な手法です。また、ドキュメント数が非常に多い場合は、mongodumpmongorestoreなどのツールを使った方が効率的にコピーできる場合もありますので、用途に応じて使い分けるとよいでしょう。

  1. Pythonモジュールを別のシステムにコピー・移行する方法【pip freezeの使い方】

    はじめにPythonの開発環境を別のマシンに移したい場合、モジュール(パッケージ)の移行方法は大きく分けて2つのケースがあります。自分で作成したモジュールを移すケースと、pipなどでインストールした外部モジュールを移すケースです。それぞれ適切な方法を理解しておくと、環境構築の手間やトラブルを大幅に減らせます。 ケース1:自作モジュールをコピーする場合自分で作成したPythonモジュール(.pyファイル)であれば、特別な手順は不要です。ファイルをそのままコピーし、Pythonがインストールされている別のシステム上に置けば、そのまま実行できます。 ケース2:インストール済みモジュールを移行する場合

  2. Redis MOVEコマンドの使い方 – キーを別のデータベースへ移動する方法

    このチュートリアルでは、Redisデータストア上でキーをあるデータベースから別のデータベースへ移動する方法を解説します。キーの移動には、redis-cliで使用できるMOVEコマンドを利用します。 MOVEコマンドは、現在選択されているデータベース(ソース)から指定したキーを削除し、そのキーを移動先(デスティネーション)のデータベースに挿入するために使用されます。なお、以下の場合は操作が実行されず、戻り値として0が返されます。 指定したキーがソースデータベースに存在しない場合 同じ名前のキーがすでに移動先のデータベースに存在する場合 構文 Redis MOVEコマンドの基本構文は以下のとお