MongoDBで一括挿入(バルクインサート)を実行する方法
MongoDBで多数のドキュメントをまとめて登録したい場合、一括挿入(バルクインサート)を利用すると効率的です。一括挿入を実行するには、initializeUnorderedBulkOp()メソッドを使用します。
一括挿入の手順
まず、initializeUnorderedBulkOp()でバルク操作のオブジェクトを作成し、insert()メソッドで複数のドキュメントを追加していきます。最後にexecute()を呼び出すことで、まとめてデータベースに書き込まれます。
> var bulkInsertDoc = db.demo663.initializeUnorderedBulkOp();
> bulkInsertDoc.insert( { Name: "John", CountryName:"US"} );
> bulkInsertDoc.insert( { Name: "Chris", CountryName:"UK"} );
> bulkInsertDoc.insert( { Name: "David", CountryName:"AUS"} );
> bulkInsertDoc.execute();
上記のコードを実行すると、次のようなBulkWriteResultが返されます。
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 3,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
この結果を見ると、「nInserted」が3となっており、3件のドキュメントがエラーなく正常に挿入されたことが確認できます。書き込み時のエラー(writeErrors)も発生していないため、処理は成功しています。
挿入結果の確認方法
コレクションに保存されたすべてのドキュメントを確認するには、find()メソッドを使用します。
> db.demo663.find();
このクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5ea1b41424113ea5458c7d05"), "Name" : "John", "CountryName" : "US" }
{ "_id" : ObjectId("5ea1b41424113ea5458c7d06"), "Name" : "Chris", "CountryName" : "UK" }
{ "_id" : ObjectId("5ea1b41424113ea5458c7d07"), "Name" : "David", "CountryName" : "AUS" }
このように、各ドキュメントには自動的にObjectIdが割り当てられ、指定したフィールド(Name、CountryName)とともにコレクションへ格納されていることがわかります。大量データを扱う場合、個別にinsertを実行するよりも一括挿入の方がネットワーク通信の回数を減らせるため、パフォーマンス面でも大きなメリットがあります。
-
MongoDBで全文検索を実行する方法 – $text演算子の使い方
MongoDBで全文検索(フルテキスト検索)を実行するには、$text 演算子を使用します。$text は、テキストインデックスが設定されたフィールドの内容に対してテキスト検索を行うための機能です。本記事では、実際のコマンド例とともに、インデックス作成から検索実行までの手順を解説します。 1. テキストインデックスの作成 まず、createIndex() メソッドを使って、検索対象となるフィールドにテキストインデックスを作成します。以下の例では、demo654 コレクションの Name フィールドに対してテキストインデックスを設定しています。 > db.demo654.createI
-
MongoDBで配列内の要素を一括更新する方法:Bulk操作による複数更新の実行
MongoDBで配列内の複数要素を一度に更新したい場合、initializeOrderedBulkOp()メソッドを活用するのが効果的です。このメソッドは、コレクションに対して新しいBulk()操作ビルダーを初期化して返します。ビルダーは、MongoDBが一括(バルク)で実行する順序付き書き込み操作のリストを構築します。サンプルコレクションの作成まず、ドキュメントを含むコレクションを作成しましょう。> db.demo550.insertOne({Name:Chris,details:[{Marks:49,Result:fail},{Marks:58,Result:fail}]}); {