Docs Menu
Docs Home
/ / /
Node.js ドライバー
/

一括操作の実行

bulkWrite() メソッドは、単一のコレクションに対してバッチ書き込み操作を実行します。この方法により、アプリケーションからサーバーへのネットワーク ラウンド トリップの回数が減り、スループットとパフォーマンスが向上します。一括書き込みでは、メソッドに渡されたすべての操作が完了した後にのみ、すべての操作の結果のコレクションが返されます。

bulkWrite() では、次の書き込み操作を 1 つ以上指定できます。

  • insertOne

  • updateOne

  • updateMany

  • deleteOne

  • deleteMany

  • replaceOne

bulkWrite() メソッドは次のパラメーターを受け入れます:

  • operations: 実行する一括書き込み操作を指定します。 各操作を配列内のオブジェクトとして bulkWrite() に渡します。各書き込み操作の構文を示す例については、bulkWrite API ドキュメントを参照してください。

  • options: 書き込み操作が順番に実行されるかどうかや 書込み保証 (write concern) など、操作の実行に影響するオプションの設定。

    デフォルトでは、MongoDB は指定された順序(連続)で一括書き込み操作を 1 つずつ実行します。 順序付き一括書込み中に、操作の処理中にエラーが発生した場合、MongoDB はリスト内の残りの操作を処理せずに返します。 対照的に、 orderedfalseの場合、MongoDB はリスト内の残りの書込み操作の処理を続行します。 順序なし操作は MongoDB が並列に実行できるため、論理的には高速ですが、書込みが順序に依存しない場合にのみ使用します。

一意のインデックス制約を使用してインデックスを作成すると、次の形式の操作中に重複キー書込みエラーが発生する可能性があります。

Error during bulkWrite, BulkWriteError: E11000 duplicate key error collection: ...

同様に、スキーマ検証を使用するコレクションに対して 一括書込み を実行しようとすると、挿入または変更されたドキュメントの形式に関連する警告やエラーが発生する可能性があります。

次のコード サンプルは、sample_mflix データベースの theaters コレクションに対して一括書き込み操作を実行します。bulkWrite() の呼び出し例には、insertOneupdateMany、および deleteOne の書き込み操作の例が含まれています。

注意

この例を使用して、MongoDB のインスタンスに接続し、サンプルデータを含むデータベースと交流できます。MongoDB インスタンスへの接続とサンプルデータセットの読み込みの詳細については、 使用例ガイドを参照してください。

1// Bulk write operation
2
3// Import MongoClient from the MongoDB node driver package
4const { MongoClient } = require("mongodb");
5
6// Replace the uri string with your MongoDB deployment's connection string
7const uri = "<connection string uri>";
8
9const client = new MongoClient(uri);
10
11async function run() {
12 try {
13 const database = client.db("sample_mflix");
14 const theaters = database.collection("theaters");
15
16 // Insert a new document into the "theaters" collection
17 const result = await theaters.bulkWrite([
18 {
19 insertOne: {
20 document: {
21 location: {
22 address: {
23 street1: "3 Main St.",
24 city: "Anchorage",
25 state: "AK",
26 zipcode: "99501",
27 },
28 },
29 },
30 },
31 },
32 {
33 insertOne: {
34 document: {
35 location: {
36 address: {
37 street1: "75 Penn Plaza",
38 city: "New York",
39 state: "NY",
40 zipcode: "10001",
41 },
42 },
43 },
44 },
45 },
46 {
47 // Update documents that match the specified filter
48 updateMany: {
49 filter: { "location.address.zipcode": "44011" },
50 update: { $set: { is_in_ohio: true } },
51 upsert: true,
52 },
53 },
54 {
55 // Delete a document that matches the specified filter
56 deleteOne: { filter: { "location.address.street1": "221b Baker St" } },
57 },
58 ]);
59 // Log the result of the bulk write operation
60 console.log(result);
61 } finally {
62 // Close the database connection when the operations are completed or if an error occurs
63 await client.close();
64 }
65}
66run().catch(console.dir);
1import { MongoClient } from "mongodb";
2
3// Replace the uri string with your MongoDB deployment's connection string.
4const uri = "<connection string uri>";
5
6const client = new MongoClient(uri);
7
8interface Address {
9 street1: string;
10 city: string;
11 state: string;
12 zipcode: string;
13}
14
15interface Theater {
16 location: { address: Address };
17 is_in_ohio?: boolean;
18}
19
20async 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}
74run().catch(console.dir);

上記の例を実行すると、次の出力が生成されます。

BulkWriteResult {
insertedCount: 2,
matchedCount: 1,
modifiedCount: 1,
deletedCount: 0,
upsertedCount: 0,
upsertedIds: {},
insertedIds: {
'0': new ObjectId("..."),
'1': new ObjectId("...")
}
}

戻る

変更の監視