定義
Mongo.bulkWrite() は、単一のコレクションに対して操作する とは異なり、1db.collection.bulkWrite() 回の呼び出しで複数のデータベースとコレクションにわたる複数の書込み操作を実行します。
注意
MongoDB 8.0 以降が必要です。
構文
次の構文を使用して、現在の Mongo() インスタンスで bulkWrite() を呼び出すことができます。
db.getMongo().bulkWrite( [ { namespace: "<db1.collection1>", name: "insertOne", document: { ... } }, { namespace: "<db2.collection2>", name: "replaceOne", filter: { ... } } ], { ordered: boolean, verboseResults: boolean, bypassDocumentValidation: boolean, let: Document } )
次の例のように、別の Mongoインスタンスで呼び出すこともできます。
const otherMongo = Mongo("<other connection string>"); otherMongo.bulkWrite([{ namespace: "<db.collection>", ... }]);
bulkWrite() は、次の 2 つのパラメータを受け入れます。
Parameter | タイプ | 説明 |
|---|---|---|
| ドキュメントの配列 | の書込み (write) 操作の配列を定義します。配列内の各ドキュメントは、実行する書込み操作を表します。 |
| ドキュメント | 操作のオプションを定義します。 |
operations のドキュメントは、次の 6 つの操作のいずれかを表すことができます。
1 つを挿入
replaceOne
更新 1
多数更新
deleteOne
deleteMany
以下のセクションでは、各操作を表すドキュメントに使用する必要がある構文について説明します。
1 つを挿入
{ namespace: '<db.collection>', name: 'insertOne', document: Document }
フィールド | タイプ | 説明 |
|---|---|---|
| 文字列 | 挿入操作のデータベースとコレクション。 |
| 文字列 | 操作名。 |
| ドキュメント | 挿入するドキュメント。 |
注意
ドキュメントに_idフィールドが含まれていない場合、mongosh は自動的にフィールドを生成します。
1 つの更新と多な更新
updateOne は、フィルターに一致する最初のドキュメントをアップデートします。 updateMany は、フィルターに一致するすべてのドキュメントをアップデートします。
{ namespace: '<db>.<collection>', name: 'updateOne' | 'updateMany', filter: Document, update: Document | Document[], arrayFilters?: Document[], hint?: Document | string, collation?: Document, upsert?: boolean }
フィールド | タイプ | 説明 |
|---|---|---|
| 文字列 | 更新操作のデータベースとコレクション。 |
| 文字列 | 操作名。を |
| ドキュメント | アップデートする 1 つ以上のドキュメントに一致するフィルター。 |
| ドキュメントまたはドキュメントの配列 | 実行される更新。 |
| ドキュメントの配列 | 任意。配列値を持つフィールドを更新する場合に更新する配列要素を指定するためのフィルター。 |
| ドキュメントまたは文字列 | 任意。操作に使用するインデックス。 |
| ドキュメント | (任意)結果をソートするときに使用する照合。 |
| ブール値 | 任意。 |
replaceOne
{ namespace: '<db>.<collection>', name: 'replaceOne', filter: Document, replacement: Document, hint?: Document | string, collation?: Document }
フィールド | タイプ | 説明 |
|---|---|---|
| 文字列 | 置換操作のデータベースとコレクション。 |
| 文字列 | 操作名。 |
| ドキュメント | アップデートするドキュメントに一致するフィルター。 |
| ドキュメント | 置換ドキュメントです。 |
| ドキュメントまたは文字列 | 任意。操作に使用するインデックス。 |
| ドキュメント | (任意)結果をソートするときに使用する照合。 |
1 つまたは複数を削除
deleteOne は フィルター に一致する最初のドキュメントを削除します。 deleteMany は、フィルターに一致するすべてのドキュメントを削除します。
{ namespace: '<db>.<collection>', name: 'deleteOne' | 'deleteMany', filter: Document, hint?: Document | string, collation?: Document }
フィールド | タイプ | 説明 |
|---|---|---|
| 文字列 | 削除操作のデータベースとコレクション。 |
| 文字列 | 操作名。を |
| ドキュメント | 削除するドキュメントを照合するための クエリ セレクター 。 |
| ドキュメントまたは文字列 | 任意。操作に使用するインデックス。 |
| ドキュメント | 任意。操作に使用する 照合 。 |
オプション
{ ordered?: boolean, verboseResults?: boolean, bypassDocumentValidation?: boolean, let?: Document }
フィールド | タイプ | 説明 |
|---|---|---|
| ブール値 | (任意) MongoDB が指定したドキュメントの順序で一括書き込みを実行することを示します。 |
| ブール値 | (任意) |
| ブール値 | (任意) 書込み (write)操作がドキュメント検証ルールをバイパスするかどうかを指定します。デフォルトは |
| ドキュメント | (任意)集計変数を使用してアクセスできるパラメーター名と値のドキュメント。 |
出力
bulkWrite() は、次のフィールドを持つオブジェクトを返します。
{ acknowledged: boolean, insertedCount: int, matchedCount: int, modifiedCount: int, deletedCount: int, upsertedCount: int, insertResults?: map(int, document), updateResults?: map(int, document), deleteResults?: map(int, document) }
フィールド | タイプ | 説明 |
|---|---|---|
| ブール値 |
|
| integer | 挿入されたドキュメントの数。 |
| integer | フィルターに一致したドキュメントの数。 |
| integer | 変更されたドキュメントの数。 |
| integer | 削除されたドキュメントの数。 |
| integer | アップサートされたドキュメントの数。 |
| ドキュメントへの整数のマップ | 任意。成功した各 挿入操作の結果を表します。各操作は整数キーで表されます。このキーには、操作に対応する情報を含むドキュメントが含まれます。ドキュメントには、次のフィールドが含まれています。
|
| ドキュメントへの整数のマップ | 任意。成功した各 更新操作の結果を表します。各操作は整数キーで表されます。このキーには、操作に対応する情報を含むドキュメントが含まれます。ドキュメントには、次のフィールドが含まれています。
|
| ドキュメントへの整数のマップ | 任意。成功した各削除操作の結果を表します。各操作は整数キーで表されます。このキーには、操作に対応する情報を含むドキュメントが含まれます。ドキュメントには、次のフィールドが含まれています。
|
例
この例では、Mongo.bulkWrite() を使用して、 sample_mflixデータベースに対して次の操作を順番に実行します。
は、
usersコレクションにドキュメントを挿入しますtheatersコレクション内のドキュメントを更新しますは、
usersコレクションに別のドキュメントを挿入します
db.getMongo().bulkWrite( [ { namespace: 'sample_mflix.users', name: 'insertOne', document: { name: 'Cersei Lannister', email: 'cersei.l@example.com', password: '$2b$12$UREFwsRUoyF0CRqGNK0LzO0HM/jLhgUCNNIJ9RJAqMUQ74crlJ1Vu' } }, { namespace: 'sample_mflix.theaters', name: 'updateOne', filter: { theaterId: 1000 }, update: { $set: { "location.address.street1": "350 W Market", "location.address.city": "Bloomington" } } }, { namespace: 'sample_mflix.users', name: 'insertOne', document: { name: 'Sansa Stark', email: 'sansa.s@example.com', password: '$2b$12$UREFwsRUoyF0CRqGNK0LzO0HM/jLhgUCNNIJ9RJAqMUQ74crlJ1Vu' } } ], { ordered: true, bypassDocumentValidation: true, verboseResults: true } )
mongosh は一括書込み (write) を順番に実行し、次のドキュメントを返します。
{ acknowledged: true, insertedCount: 2, matchedCount: 1, modifiedCount: 1, deletedCount: 0, upsertedCount: 0, insertResults: Map(2) { 0 => { insertedId: "..." }, 2 => { insertedId: "..." } }, updateResults: Map(1) { 1 => { matchedCount: 1, modifiedCount: 1, didUpsert: false } }, deleteResults: Map(0) {} }