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 インスタンスへの接続とサンプルデータセットの読み込みの詳細については、 使用例ガイドを参照してください。

1const { MongoClient } = require("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
8async 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}
59run().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("...")
}
}

戻る

変更の監視