一括操作の実行
bulkWrite()
メソッドは、単一のコレクションに対してバッチ書き込み操作を実行します。この方法により、アプリケーションからサーバーへのネットワーク ラウンド トリップの回数が減り、スループットとパフォーマンスが向上します。一括書き込みでは、メソッドに渡されたすべての操作が完了した後にのみ、すべての操作の結果のコレクションが返されます。
bulkWrite()
では、次の書き込み操作を 1 つ以上指定できます。
insertOne
updateOne
updateMany
deleteOne
deleteMany
replaceOne
bulkWrite()
メソッドは次のパラメーターを受け入れます:
operations
: 実行する一括書き込み操作を指定します。 各操作を配列内のオブジェクトとしてbulkWrite()
に渡します。 各書き込み操作の構文を示す例については、 bulkWrite API ドキュメントを参照してください。options
: 書き込み操作を順番に実行するかどうかや 書込み保証 (write concern) など、操作の実行に影響するオプションの設定。デフォルトでは、MongoDB は指定された順序で一括書込み操作を 1 つずつ実行します(つまり、 シリアルに)する必要があります。 順序付き一括書込み中に、操作の処理中にエラーが発生した場合、MongoDB はリスト内の残りの操作を処理せずに返します。 対照的に、
ordered
がfalse
の場合、MongoDB はリスト内の残りの書込み操作の処理を続行します。 順序なし操作は MongoDB が並列に実行できるため論理的に高速ですが、書込みが順序に依存しない場合にのみ使用してください。
一意のインデックス制約を使用してインデックスを作成すると、次の形式の操作中に重複キー書込みエラーが発生する可能性があります。
Error during bulkWrite, BulkWriteError: E11000 duplicate key error collection: ...
同様に、スキーマ検証を使用するコレクションに対して 一括書込み を実行しようとすると、挿入または変更されたドキュメントの形式に関連する警告やエラーが発生する可能性があります。
例
次のコード サンプルは、sample_mflix
データベースの theaters
コレクションに対して一括書き込み操作を実行します。bulkWrite()
の呼び出し例には、insertOne
、updateMany
、および deleteOne
の書き込み操作の例が含まれています。
注意
この例を使用して、MongoDB のインスタンスに接続し、サンプルデータを含むデータベースと交流できます。MongoDB インスタンスへの接続とサンプルデータセットの読み込みの詳細については、 使用例ガイドを参照してください。
1 const { MongoClient } = require("mongodb"); 2 3 // Replace the uri string with your MongoDB deployment's connection string. 4 const uri = "<connection string uri>"; 5 6 const client = new MongoClient(uri); 7 8 async function run() { 9 try { 10 const database = client.db("sample_mflix"); 11 const theaters = database.collection("theaters"); 12 13 const result = await theaters.bulkWrite([ 14 { 15 insertOne: { 16 document: { 17 location: { 18 address: { 19 street1: "3 Main St.", 20 city: "Anchorage", 21 state: "AK", 22 zipcode: "99501", 23 }, 24 }, 25 }, 26 }, 27 }, 28 { 29 insertOne: { 30 document: { 31 location: { 32 address: { 33 street1: "75 Penn Plaza", 34 city: "New York", 35 state: "NY", 36 zipcode: "10001", 37 }, 38 }, 39 }, 40 }, 41 }, 42 { 43 updateMany: { 44 filter: { "location.address.zipcode": "44011" }, 45 update: { $set: { is_in_ohio: true } }, 46 upsert: true, 47 }, 48 }, 49 { 50 deleteOne: { filter: { "location.address.street1": "221b Baker St" } }, 51 }, 52 ]); 53 54 console.log(result); 55 } finally { 56 await client.close(); 57 } 58 } 59 run().catch(console.dir);
1 import { MongoClient } from "mongodb"; 2 3 // Replace the uri string with your MongoDB deployment's connection string. 4 const uri = "<connection string uri>"; 5 6 const client = new MongoClient(uri); 7 8 interface Address { 9 street1: string; 10 city: string; 11 state: string; 12 zipcode: string; 13 } 14 15 interface Theater { 16 location: { address: Address }; 17 is_in_ohio?: boolean; 18 } 19 20 async function run() { 21 try { 22 const database = client.db("sample_mflix"); 23 const theaters = database.collection<Theater>("theaters"); 24 25 const result = await theaters.bulkWrite([ 26 { 27 insertOne: { 28 document: { 29 location: { 30 address: { 31 street1: "3 Main St.", 32 city: "Anchorage", 33 state: "AK", 34 zipcode: "99501", 35 }, 36 }, 37 }, 38 }, 39 }, 40 { 41 insertOne: { 42 document: { 43 location: { 44 address: { 45 street1: "75 Penn Plaza", 46 city: "New York", 47 state: "NY", 48 zipcode: "10001", 49 }, 50 }, 51 }, 52 }, 53 }, 54 { 55 updateMany: { 56 // Important: You lose type safety when you use dot notation in queries 57 filter: { "location.address.zipcode": "44011" }, 58 update: { $set: { is_in_ohio: true } }, 59 upsert: true, 60 }, 61 }, 62 { 63 deleteOne: { 64 filter: { "location.address.street1": "221b Baker St" }, 65 }, 66 }, 67 ]); 68 69 console.log(result); 70 } finally { 71 await client.close(); 72 } 73 } 74 run().catch(console.dir);
上記の例を実行すると、次の出力が表示されます。
BulkWriteResult { insertedCount: 2, matchedCount: 1, modifiedCount: 1, deletedCount: 0, upsertedCount: 0, upsertedIds: {}, insertedIds: { '0': new ObjectId("..."), '1': new ObjectId("...") } }