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

MongoDBでコレクションのクローン(複製)を作成する方法

MongoDBでコレクションを複製(クローン)したい場合、find() メソッドと forEach() メソッドを組み合わせることで簡単に実現できます。この記事では、実際にコレクションを作成し、そのクローンを作るまでの手順を順番に解説します。

手順1:元となるコレクションを作成する

まず、insertOne() メソッドを使って、ドキュメントを含むコレクションを作成します。ここでは学生情報を管理する studentInformation コレクションを例にします。

> db.studentInformation.insertOne({"StudentName":"Chris"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8bc15780f10143d8431e21")
}
> db.studentInformation.insertOne({"StudentName":"Robert"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8bc15e80f10143d8431e22")
}
> db.studentInformation.insertOne({"StudentName":"James"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c8bc17380f10143d8431e23")
}

3件のドキュメントが正常に挿入されました。

手順2:登録されたドキュメントを確認する

find() メソッドに pretty() を付けて実行すると、コレクション内のすべてのドキュメントを見やすい形式で表示できます。

> db.studentInformation.find().pretty();

実行結果は以下のとおりです。

{ "_id" : ObjectId("5c8bc15780f10143d8431e21"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5c8bc15e80f10143d8431e22"), "StudentName" : "Robert" }
{ "_id" : ObjectId("5c8bc17380f10143d8431e23"), "StudentName" : "James" }

手順3:forEach()メソッドでクローンを作成する

MongoDBでコレクションのクローンを作成するには、元のコレクションに対して find() を実行し、取得した各ドキュメントを新しいコレクションへ挿入していきます。具体的には以下のようなクエリを使用します。

> db.studentInformation.find().forEach( function(copyValue){db.makingStudentInformationClone.insert(copyValue)} );

このクエリでは、studentInformation コレクションから全ドキュメントを取得し、forEach() のコールバック関数内で、それらを1件ずつ makingStudentInformationClone という新しいコレクションに挿入しています。なお、_id フィールドも含めてコピーされるため、元のドキュメントと完全に同一のデータが複製されます。

手順4:クローンしたコレクションの中身を確認する

複製が正しく行われたかどうか、クローン先のコレクションに対して find() を実行して確認しましょう。

> db.makingStudentInformationClone.find();

実行結果は以下のとおりです。

{ "_id" : ObjectId("5c8bc15780f10143d8431e21"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5c8bc15e80f10143d8431e22"), "StudentName" : "Robert" }
{ "_id" : ObjectId("5c8bc17380f10143d8431e23"), "StudentName" : "James" }

元のコレクションとまったく同じドキュメントが格納されていることがわかります。

手順5:コレクション一覧でクローンを確認する

最後に、show collections コマンドを実行して、クローンを含むすべてのコレクションの一覧を確認します。

> show collections;

実行結果は以下のとおりです。

copyThisCollectionToSampleDatabaseDemo
deleteDocuments
deleteDocumentsDemo
deleteSomeInformation
employee
getElementWithMaxIdDemo
internalArraySizeDemo
makingStudentInformationClone
prettyDemo
selectWhereInDemo
sourceCollection
studentInformation
updateInformation
userInformation

一覧の中に makingStudentInformationClone が存在することから、クローン作成が成功したことが確認できます。

補足:その他のコレクション複製方法

forEach() を使う方法以外にも、MongoDBではコレクションを複製する手段がいくつかあります。

  • 集計フレームワークの $out を使う方法: db.sourceCollection.aggregate([ { $match: {} }, { $out: "targetCollection" } ]) のように記述すると、サーバー側でまとめてコピーでき、大量データの場合はこちらの方が高速です。
  • mongodump / mongorestore を使う方法: データベース全体やコレクション単位でのバックアップ・復元にも利用できます。

用途やデータ量に応じて適切な方法を選択するとよいでしょう。

  1. MongoDBで配列の値を使ってコレクションを並べ替える方法

    MongoDBのコレクションを配列の値を基準にソートしたい場合は、aggregate()メソッドと $sort ステージを組み合わせて使用します。さらに、配列を個々のドキュメントに分解するために $unwind も活用します。 サンプルコレクションの作成 まず、ドキュメントを含むコレクションを作成しましょう。ここでは、学生ごとの詳細情報(名前とスコア)を配列として持つドキュメントを挿入します。 > db.demo577.insertOne( ... { ... student: { ... details: [ ... { .

  2. MongoDBで_idを指定してコレクション内のドキュメントを更新する方法

    MongoDBでは、_idを指定して特定のドキュメントを更新する際に、$set演算子を使用します。_idは各ドキュメントの一意な識別子であるため、これを条件にすることで目的のドキュメントだけを正確に更新できます。この記事では、実際にコレクションを作成し、_idをキーにしてドキュメントを更新する手順を順番に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使ってサンプルのコレクションにドキュメントを挿入します。db.demo741.insertOne({SubjectName:MySQL}); { acknowledged : true,