mongodb 6.9.0-dev.20241003.sha.91f30357 → 6.9.0-dev.20241011.sha.8def42de

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/lib/beta.d.ts +40 -2
  2. package/lib/bulk/common.js +60 -71
  3. package/lib/bulk/common.js.map +1 -1
  4. package/lib/bulk/unordered.js +3 -3
  5. package/lib/bulk/unordered.js.map +1 -1
  6. package/lib/change_stream.js +3 -2
  7. package/lib/change_stream.js.map +1 -1
  8. package/lib/cmap/wire_protocol/responses.js +3 -0
  9. package/lib/cmap/wire_protocol/responses.js.map +1 -1
  10. package/lib/cursor/client_bulk_write_cursor.js +1 -5
  11. package/lib/cursor/client_bulk_write_cursor.js.map +1 -1
  12. package/lib/error.js +24 -3
  13. package/lib/error.js.map +1 -1
  14. package/lib/index.js +4 -3
  15. package/lib/index.js.map +1 -1
  16. package/lib/mongo_client.js +3 -0
  17. package/lib/mongo_client.js.map +1 -1
  18. package/lib/operations/client_bulk_write/client_bulk_write.js +30 -10
  19. package/lib/operations/client_bulk_write/client_bulk_write.js.map +1 -1
  20. package/lib/operations/client_bulk_write/command_builder.js +62 -4
  21. package/lib/operations/client_bulk_write/command_builder.js.map +1 -1
  22. package/lib/operations/client_bulk_write/executor.js +43 -7
  23. package/lib/operations/client_bulk_write/executor.js.map +1 -1
  24. package/lib/operations/client_bulk_write/results_merger.js +116 -33
  25. package/lib/operations/client_bulk_write/results_merger.js.map +1 -1
  26. package/lib/operations/execute_operation.js +7 -0
  27. package/lib/operations/execute_operation.js.map +1 -1
  28. package/lib/operations/operation.js +5 -1
  29. package/lib/operations/operation.js.map +1 -1
  30. package/mongodb.d.ts +40 -2
  31. package/package.json +1 -1
  32. package/src/bulk/common.ts +80 -120
  33. package/src/bulk/unordered.ts +3 -4
  34. package/src/change_stream.ts +5 -2
  35. package/src/cmap/wire_protocol/responses.ts +4 -0
  36. package/src/cursor/client_bulk_write_cursor.ts +2 -8
  37. package/src/error.ts +44 -2
  38. package/src/index.ts +2 -0
  39. package/src/mongo_client.ts +5 -0
  40. package/src/operations/client_bulk_write/client_bulk_write.ts +36 -10
  41. package/src/operations/client_bulk_write/command_builder.ts +84 -5
  42. package/src/operations/client_bulk_write/common.ts +6 -0
  43. package/src/operations/client_bulk_write/executor.ts +48 -7
  44. package/src/operations/client_bulk_write/results_merger.ts +120 -40
  45. package/src/operations/execute_operation.ts +8 -0
  46. package/src/operations/operation.ts +6 -1
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ClientBulkWriteResultsMerger = void 0;
4
+ const __1 = require("../..");
5
+ const error_1 = require("../../error");
4
6
  /**
5
7
  * Merges client bulk write cursor responses together into a single result.
6
8
  * @internal
@@ -12,6 +14,9 @@ class ClientBulkWriteResultsMerger {
12
14
  */
13
15
  constructor(options) {
14
16
  this.options = options;
17
+ this.currentBatchOffset = 0;
18
+ this.writeConcernErrors = [];
19
+ this.writeErrors = new Map();
15
20
  this.result = {
16
21
  insertedCount: 0,
17
22
  upsertedCount: 0,
@@ -35,50 +40,128 @@ class ClientBulkWriteResultsMerger {
35
40
  * @param documents - The documents in the cursor.
36
41
  * @returns The current result.
37
42
  */
38
- merge(currentBatchOffset, operations, response, documents) {
39
- // Update the counts from the cursor response.
40
- this.result.insertedCount += response.insertedCount;
41
- this.result.upsertedCount += response.upsertedCount;
42
- this.result.matchedCount += response.matchedCount;
43
- this.result.modifiedCount += response.modifiedCount;
44
- this.result.deletedCount += response.deletedCount;
45
- if (this.options.verboseResults) {
46
- // Iterate all the documents in the cursor and update the result.
47
- for (const document of documents) {
43
+ async merge(cursor) {
44
+ let writeConcernErrorResult;
45
+ try {
46
+ for await (const document of cursor) {
48
47
  // Only add to maps if ok: 1
49
48
  if (document.ok === 1) {
50
- // Get the corresponding operation from the command.
51
- const operation = operations[document.idx];
52
- // Handle insert results.
53
- if ('insert' in operation) {
54
- this.result.insertResults?.set(document.idx + currentBatchOffset, {
55
- insertedId: operation.document._id
56
- });
49
+ if (this.options.verboseResults) {
50
+ this.processDocument(cursor, document);
57
51
  }
58
- // Handle update results.
59
- if ('update' in operation) {
60
- const result = {
61
- matchedCount: document.n,
62
- modifiedCount: document.nModified ?? 0,
63
- // Check if the bulk did actually upsert.
64
- didUpsert: document.upserted != null
65
- };
66
- if (document.upserted) {
67
- result.upsertedId = document.upserted._id;
68
- }
69
- this.result.updateResults?.set(document.idx + currentBatchOffset, result);
52
+ }
53
+ else {
54
+ // If an individual write error is encountered during an ordered bulk write, drivers MUST
55
+ // record the error in writeErrors and immediately throw the exception. Otherwise, drivers
56
+ // MUST continue to iterate the results cursor and execute any further bulkWrite batches.
57
+ if (this.options.ordered) {
58
+ const error = new error_1.MongoClientBulkWriteError({
59
+ message: 'Mongo client ordered bulk write encountered a write error.'
60
+ });
61
+ error.writeErrors.set(document.idx + this.currentBatchOffset, {
62
+ code: document.code,
63
+ message: document.errmsg
64
+ });
65
+ error.partialResult = this.result;
66
+ throw error;
70
67
  }
71
- // Handle delete results.
72
- if ('delete' in operation) {
73
- this.result.deleteResults?.set(document.idx + currentBatchOffset, {
74
- deletedCount: document.n
68
+ else {
69
+ this.writeErrors.set(document.idx + this.currentBatchOffset, {
70
+ code: document.code,
71
+ message: document.errmsg
75
72
  });
76
73
  }
77
74
  }
78
75
  }
79
76
  }
77
+ catch (error) {
78
+ if (error instanceof __1.MongoWriteConcernError) {
79
+ const result = error.result;
80
+ writeConcernErrorResult = {
81
+ insertedCount: result.nInserted,
82
+ upsertedCount: result.nUpserted,
83
+ matchedCount: result.nMatched,
84
+ modifiedCount: result.nModified,
85
+ deletedCount: result.nDeleted,
86
+ writeConcernError: result.writeConcernError
87
+ };
88
+ if (this.options.verboseResults && result.cursor.firstBatch) {
89
+ for (const document of result.cursor.firstBatch) {
90
+ if (document.ok === 1) {
91
+ this.processDocument(cursor, document);
92
+ }
93
+ }
94
+ }
95
+ }
96
+ else {
97
+ throw error;
98
+ }
99
+ }
100
+ finally {
101
+ // Update the counts from the cursor response.
102
+ if (cursor.response) {
103
+ const response = cursor.response;
104
+ this.incrementCounts(response);
105
+ }
106
+ // Increment the batch offset.
107
+ this.currentBatchOffset += cursor.operations.length;
108
+ }
109
+ // If we have write concern errors ensure they are added.
110
+ if (writeConcernErrorResult) {
111
+ const writeConcernError = writeConcernErrorResult.writeConcernError;
112
+ this.incrementCounts(writeConcernErrorResult);
113
+ this.writeConcernErrors.push({
114
+ code: writeConcernError.code,
115
+ message: writeConcernError.errmsg
116
+ });
117
+ }
80
118
  return this.result;
81
119
  }
120
+ /**
121
+ * Process an individual document in the results.
122
+ * @param cursor - The cursor.
123
+ * @param document - The document to process.
124
+ */
125
+ processDocument(cursor, document) {
126
+ // Get the corresponding operation from the command.
127
+ const operation = cursor.operations[document.idx];
128
+ // Handle insert results.
129
+ if ('insert' in operation) {
130
+ this.result.insertResults?.set(document.idx + this.currentBatchOffset, {
131
+ insertedId: operation.document._id
132
+ });
133
+ }
134
+ // Handle update results.
135
+ if ('update' in operation) {
136
+ const result = {
137
+ matchedCount: document.n,
138
+ modifiedCount: document.nModified ?? 0,
139
+ // Check if the bulk did actually upsert.
140
+ didUpsert: document.upserted != null
141
+ };
142
+ if (document.upserted) {
143
+ result.upsertedId = document.upserted._id;
144
+ }
145
+ this.result.updateResults?.set(document.idx + this.currentBatchOffset, result);
146
+ }
147
+ // Handle delete results.
148
+ if ('delete' in operation) {
149
+ this.result.deleteResults?.set(document.idx + this.currentBatchOffset, {
150
+ deletedCount: document.n
151
+ });
152
+ }
153
+ }
154
+ /**
155
+ * Increment the result counts.
156
+ * @param document - The document with the results.
157
+ */
158
+ incrementCounts(document) {
159
+ this.result.insertedCount += document.insertedCount;
160
+ this.result.upsertedCount += document.upsertedCount;
161
+ this.result.matchedCount += document.matchedCount;
162
+ this.result.modifiedCount += document.modifiedCount;
163
+ this.result.deletedCount += document.deletedCount;
164
+ }
82
165
  }
83
166
  exports.ClientBulkWriteResultsMerger = ClientBulkWriteResultsMerger;
84
167
  //# sourceMappingURL=results_merger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"results_merger.js","sourceRoot":"","sources":["../../../src/operations/client_bulk_write/results_merger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"results_merger.js","sourceRoot":"","sources":["../../../src/operations/client_bulk_write/results_merger.ts"],"names":[],"mappings":"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"}
@@ -168,6 +168,9 @@ async function tryOperation(operation, { topology, session, readPreference }) {
168
168
  originalError: previousOperationError
169
169
  });
170
170
  }
171
+ if (operation.hasAspect(operation_1.Aspect.COMMAND_BATCHING) && !operation.canRetryWrite) {
172
+ throw previousOperationError;
173
+ }
171
174
  if (hasWriteAspect && !(0, error_1.isRetryableWriteError)(previousOperationError))
172
175
  throw previousOperationError;
173
176
  if (hasReadAspect && !(0, error_1.isRetryableReadError)(previousOperationError))
@@ -189,6 +192,10 @@ async function tryOperation(operation, { topology, session, readPreference }) {
189
192
  }
190
193
  }
191
194
  try {
195
+ // If tries > 0 and we are command batching we need to reset the batch.
196
+ if (tries > 0 && operation.hasAspect(operation_1.Aspect.COMMAND_BATCHING)) {
197
+ operation.resetBatch();
198
+ }
192
199
  return await operation.execute(server, session);
193
200
  }
194
201
  catch (operationError) {
@@ -1 +1 @@
1
- {"version":3,"file":"execute_operation.js","sourceRoot":"","sources":["../../src/operations/execute_operation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execute_operation.js","sourceRoot":"","sources":["../../src/operations/execute_operation.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,8 @@ exports.Aspect = {
11
11
  EXPLAINABLE: Symbol('EXPLAINABLE'),
12
12
  SKIP_COLLATION: Symbol('SKIP_COLLATION'),
13
13
  CURSOR_CREATING: Symbol('CURSOR_CREATING'),
14
- MUST_SELECT_SAME_SERVER: Symbol('MUST_SELECT_SAME_SERVER')
14
+ MUST_SELECT_SAME_SERVER: Symbol('MUST_SELECT_SAME_SERVER'),
15
+ COMMAND_BATCHING: Symbol('COMMAND_BATCHING')
15
16
  };
16
17
  /** @internal */
17
18
  const kSession = Symbol('session');
@@ -47,6 +48,9 @@ class AbstractOperation {
47
48
  clearSession() {
48
49
  this[kSession] = undefined;
49
50
  }
51
+ resetBatch() {
52
+ return true;
53
+ }
50
54
  get canRetryRead() {
51
55
  return this.hasAspect(exports.Aspect.RETRYABLE) && this.hasAspect(exports.Aspect.READ_OPERATION);
52
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"operation.js","sourceRoot":"","sources":["../../src/operations/operation.ts"],"names":[],"mappings":";;;AA6GA,sCAeC;AA5HD,kCAAuF;AACvF,wDAA6E;AAKhE,QAAA,MAAM,GAAG;IACpB,cAAc,EAAE,MAAM,CAAC,gBAAgB,CAAC;IACxC,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC,gBAAgB,CAAC;IACxC,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC;IAC1C,uBAAuB,EAAE,MAAM,CAAC,yBAAyB,CAAC;CAClD,CAAC;AAsBX,gBAAgB;AAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAEnC;;;;;;GAMG;AACH,MAAsB,iBAAiB;IAgBrC,YAAY,UAA4B,EAAE;QACxC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,cAAM,CAAC,eAAe,CAAC;YAC1D,CAAC,CAAC,gCAAc,CAAC,OAAO;YACxB,CAAC,CAAC,CAAC,gCAAc,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,gCAAc,CAAC,OAAO,CAAC,CAAC;QAEpE,oEAAoE;QACpE,IAAI,CAAC,WAAW,GAAG,IAAA,yBAAkB,EAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAEvE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACvD,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACjC,CAAC;IAQD,SAAS,CAAC,MAAc;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAwC,CAAC;QAC3D,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,YAAY;QACV,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,cAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,cAAM,CAAC,cAAc,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,cAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,cAAM,CAAC,eAAe,CAAC,CAAC;IACpF,CAAC;CACF;AA7DD,8CA6DC;AAED,SAAgB,aAAa,CAC3B,SAAoC,EACpC,OAAwC;IAExC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,YAAY,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE;QAC1C,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"operation.js","sourceRoot":"","sources":["../../src/operations/operation.ts"],"names":[],"mappings":";;;AAkHA,sCAeC;AAjID,kCAAuF;AACvF,wDAA6E;AAKhE,QAAA,MAAM,GAAG;IACpB,cAAc,EAAE,MAAM,CAAC,gBAAgB,CAAC;IACxC,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC,gBAAgB,CAAC;IACxC,eAAe,EAAE,MAAM,CAAC,iBAAiB,CAAC;IAC1C,uBAAuB,EAAE,MAAM,CAAC,yBAAyB,CAAC;IAC1D,gBAAgB,EAAE,MAAM,CAAC,kBAAkB,CAAC;CACpC,CAAC;AAsBX,gBAAgB;AAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAEnC;;;;;;GAMG;AACH,MAAsB,iBAAiB;IAgBrC,YAAY,UAA4B,EAAE;QACxC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,cAAM,CAAC,eAAe,CAAC;YAC1D,CAAC,CAAC,gCAAc,CAAC,OAAO;YACxB,CAAC,CAAC,CAAC,gCAAc,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,gCAAc,CAAC,OAAO,CAAC,CAAC;QAEpE,oEAAoE;QACpE,IAAI,CAAC,WAAW,GAAG,IAAA,yBAAkB,EAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAEvE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACvD,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACjC,CAAC;IAQD,SAAS,CAAC,MAAc;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAwC,CAAC;QAC3D,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,YAAY;QACV,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,cAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,cAAM,CAAC,cAAc,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,cAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,cAAM,CAAC,eAAe,CAAC,CAAC;IACpF,CAAC;CACF;AAjED,8CAiEC;AAED,SAAgB,aAAa,CAC3B,SAAoC,EACpC,OAAwC;IAExC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,YAAY,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE;QAC1C,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/mongodb.d.ts CHANGED
@@ -1487,6 +1487,12 @@ export declare interface ChangeStreamUpdateDocument<TSchema extends Document = D
1487
1487
  fullDocumentBeforeChange?: TSchema;
1488
1488
  }
1489
1489
 
1490
+ /** @public */
1491
+ export declare interface ClientBulkWriteError {
1492
+ code: number;
1493
+ message: string;
1494
+ }
1495
+
1490
1496
  /** @public */
1491
1497
  export declare interface ClientBulkWriteOptions extends CommandOperationOptions {
1492
1498
  /**
@@ -5319,6 +5325,36 @@ export declare class MongoClientBulkWriteCursorError extends MongoRuntimeError {
5319
5325
  get name(): string;
5320
5326
  }
5321
5327
 
5328
+ /**
5329
+ * An error indicating that an error occurred when executing the bulk write.
5330
+ *
5331
+ * @public
5332
+ * @category Error
5333
+ */
5334
+ export declare class MongoClientBulkWriteError extends MongoServerError {
5335
+ /**
5336
+ * Write concern errors that occurred while executing the bulk write. This list may have
5337
+ * multiple items if more than one server command was required to execute the bulk write.
5338
+ */
5339
+ writeConcernErrors: Document[];
5340
+ /**
5341
+ * Errors that occurred during the execution of individual write operations. This map will
5342
+ * contain at most one entry if the bulk write was ordered.
5343
+ */
5344
+ writeErrors: Map<number, ClientBulkWriteError>;
5345
+ /**
5346
+ * The results of any successful operations that were performed before the error was
5347
+ * encountered.
5348
+ */
5349
+ partialResult?: ClientBulkWriteResult;
5350
+ /**
5351
+ * Initialize the client bulk write error.
5352
+ * @param message - The error message.
5353
+ */
5354
+ constructor(message: ErrorDescription);
5355
+ get name(): string;
5356
+ }
5357
+
5322
5358
  /**
5323
5359
  * An error indicating that an error occurred on the client when executing a client bulk write.
5324
5360
  *
@@ -5988,7 +6024,9 @@ export declare class MongoInvalidArgumentError extends MongoAPIError {
5988
6024
  *
5989
6025
  * @public
5990
6026
  **/
5991
- constructor(message: string);
6027
+ constructor(message: string, options?: {
6028
+ cause?: Error;
6029
+ });
5992
6030
  get name(): string;
5993
6031
  }
5994
6032
 
@@ -7814,7 +7852,7 @@ export declare class TypedEventEmitter<Events extends EventsDescription> extends
7814
7852
  /** @public */
7815
7853
  export declare class UnorderedBulkOperation extends BulkOperationBase {
7816
7854
  /* Excluded from this release type: __constructor */
7817
- handleWriteError(callback: Callback, writeResult: BulkWriteResult): boolean;
7855
+ handleWriteError(writeResult: BulkWriteResult): void;
7818
7856
  addToOperationsList(batchType: BatchType, document: Document | UpdateStatement | DeleteStatement): this;
7819
7857
  }
7820
7858
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mongodb",
3
- "version": "6.9.0-dev.20241003.sha.91f30357",
3
+ "version": "6.9.0-dev.20241011.sha.8def42de",
4
4
  "description": "The official MongoDB driver for Node.js",
5
5
  "main": "lib/index.js",
6
6
  "files": [
@@ -1,5 +1,3 @@
1
- import { promisify } from 'util';
2
-
3
1
  import { type BSONSerializeOptions, type Document, EJSON, resolveBSONOptions } from '../bson';
4
2
  import type { Collection } from '../collection';
5
3
  import {
@@ -7,6 +5,7 @@ import {
7
5
  MongoBatchReExecutionError,
8
6
  MONGODB_ERROR_CODES,
9
7
  MongoInvalidArgumentError,
8
+ MongoRuntimeError,
10
9
  MongoServerError,
11
10
  MongoWriteConcernError
12
11
  } from '../error';
@@ -22,7 +21,6 @@ import type { Topology } from '../sdam/topology';
22
21
  import type { ClientSession } from '../sessions';
23
22
  import {
24
23
  applyRetryableWrites,
25
- type Callback,
26
24
  getTopology,
27
25
  hasAtomicOperators,
28
26
  maybeAddIdToDocuments,
@@ -500,86 +498,46 @@ export function mergeBatchResults(
500
498
  }
501
499
  }
502
500
 
503
- function executeCommands(
501
+ async function executeCommands(
504
502
  bulkOperation: BulkOperationBase,
505
- options: BulkWriteOptions,
506
- callback: Callback<BulkWriteResult>
507
- ) {
503
+ options: BulkWriteOptions
504
+ ): Promise<BulkWriteResult> {
508
505
  if (bulkOperation.s.batches.length === 0) {
509
- return callback(
510
- undefined,
511
- new BulkWriteResult(bulkOperation.s.bulkResult, bulkOperation.isOrdered)
512
- );
506
+ return new BulkWriteResult(bulkOperation.s.bulkResult, bulkOperation.isOrdered);
513
507
  }
514
508
 
515
- const batch = bulkOperation.s.batches.shift() as Batch;
509
+ for (const batch of bulkOperation.s.batches) {
510
+ const finalOptions = resolveOptions(bulkOperation, {
511
+ ...options,
512
+ ordered: bulkOperation.isOrdered
513
+ });
516
514
 
517
- function resultHandler(err?: AnyError, result?: Document) {
518
- // Error is a driver related error not a bulk op error, return early
519
- if (err && 'message' in err && !(err instanceof MongoWriteConcernError)) {
520
- return callback(
521
- new MongoBulkWriteError(
522
- err,
523
- new BulkWriteResult(bulkOperation.s.bulkResult, bulkOperation.isOrdered)
524
- )
525
- );
515
+ if (finalOptions.bypassDocumentValidation !== true) {
516
+ delete finalOptions.bypassDocumentValidation;
526
517
  }
527
518
 
528
- if (err instanceof MongoWriteConcernError) {
529
- return handleMongoWriteConcernError(
530
- batch,
531
- bulkOperation.s.bulkResult,
532
- bulkOperation.isOrdered,
533
- err,
534
- callback
535
- );
519
+ // Is the bypassDocumentValidation options specific
520
+ if (bulkOperation.s.bypassDocumentValidation === true) {
521
+ finalOptions.bypassDocumentValidation = true;
536
522
  }
537
523
 
538
- // Merge the results together
539
- mergeBatchResults(batch, bulkOperation.s.bulkResult, err, result);
540
- const writeResult = new BulkWriteResult(bulkOperation.s.bulkResult, bulkOperation.isOrdered);
541
- if (bulkOperation.handleWriteError(callback, writeResult)) return;
542
-
543
- // Execute the next command in line
544
- executeCommands(bulkOperation, options, callback);
545
- }
546
-
547
- const finalOptions = resolveOptions(bulkOperation, {
548
- ...options,
549
- ordered: bulkOperation.isOrdered
550
- });
551
-
552
- if (finalOptions.bypassDocumentValidation !== true) {
553
- delete finalOptions.bypassDocumentValidation;
554
- }
555
-
556
- // Set an operationIf if provided
557
- if (bulkOperation.operationId) {
558
- resultHandler.operationId = bulkOperation.operationId;
559
- }
560
-
561
- // Is the bypassDocumentValidation options specific
562
- if (bulkOperation.s.bypassDocumentValidation === true) {
563
- finalOptions.bypassDocumentValidation = true;
564
- }
565
-
566
- // Is the checkKeys option disabled
567
- if (bulkOperation.s.checkKeys === false) {
568
- finalOptions.checkKeys = false;
569
- }
570
-
571
- if (finalOptions.retryWrites) {
572
- if (isUpdateBatch(batch)) {
573
- finalOptions.retryWrites = finalOptions.retryWrites && !batch.operations.some(op => op.multi);
524
+ // Is the checkKeys option disabled
525
+ if (bulkOperation.s.checkKeys === false) {
526
+ finalOptions.checkKeys = false;
574
527
  }
575
528
 
576
- if (isDeleteBatch(batch)) {
577
- finalOptions.retryWrites =
578
- finalOptions.retryWrites && !batch.operations.some(op => op.limit === 0);
529
+ if (finalOptions.retryWrites) {
530
+ if (isUpdateBatch(batch)) {
531
+ finalOptions.retryWrites =
532
+ finalOptions.retryWrites && !batch.operations.some(op => op.multi);
533
+ }
534
+
535
+ if (isDeleteBatch(batch)) {
536
+ finalOptions.retryWrites =
537
+ finalOptions.retryWrites && !batch.operations.some(op => op.limit === 0);
538
+ }
579
539
  }
580
- }
581
540
 
582
- try {
583
541
  const operation = isInsertBatch(batch)
584
542
  ? new InsertOperation(bulkOperation.s.namespace, batch.operations, finalOptions)
585
543
  : isUpdateBatch(batch)
@@ -588,39 +546,50 @@ function executeCommands(
588
546
  ? new DeleteOperation(bulkOperation.s.namespace, batch.operations, finalOptions)
589
547
  : null;
590
548
 
591
- if (operation != null) {
592
- executeOperation(bulkOperation.s.collection.client, operation).then(
593
- result => resultHandler(undefined, result),
594
- error => resultHandler(error)
595
- );
549
+ if (operation == null) throw new MongoRuntimeError(`Unknown batchType: ${batch.batchType}`);
550
+
551
+ let thrownError = null;
552
+ let result;
553
+ try {
554
+ result = await executeOperation(bulkOperation.s.collection.client, operation);
555
+ } catch (error) {
556
+ thrownError = error;
557
+ }
558
+
559
+ if (thrownError != null) {
560
+ if (thrownError instanceof MongoWriteConcernError) {
561
+ mergeBatchResults(batch, bulkOperation.s.bulkResult, thrownError, result);
562
+ const writeResult = new BulkWriteResult(
563
+ bulkOperation.s.bulkResult,
564
+ bulkOperation.isOrdered
565
+ );
566
+
567
+ throw new MongoBulkWriteError(
568
+ {
569
+ message: thrownError.result.writeConcernError.errmsg,
570
+ code: thrownError.result.writeConcernError.code
571
+ },
572
+ writeResult
573
+ );
574
+ } else {
575
+ // Error is a driver related error not a bulk op error, return early
576
+ throw new MongoBulkWriteError(
577
+ thrownError,
578
+ new BulkWriteResult(bulkOperation.s.bulkResult, bulkOperation.isOrdered)
579
+ );
580
+ }
596
581
  }
597
- } catch (err) {
598
- // Force top level error
599
- err.ok = 0;
600
- // Merge top level error and return
601
- mergeBatchResults(batch, bulkOperation.s.bulkResult, err, undefined);
602
- callback();
582
+
583
+ mergeBatchResults(batch, bulkOperation.s.bulkResult, thrownError, result);
584
+ const writeResult = new BulkWriteResult(bulkOperation.s.bulkResult, bulkOperation.isOrdered);
585
+ bulkOperation.handleWriteError(writeResult);
603
586
  }
604
- }
605
587
 
606
- function handleMongoWriteConcernError(
607
- batch: Batch,
608
- bulkResult: BulkResult,
609
- isOrdered: boolean,
610
- err: MongoWriteConcernError,
611
- callback: Callback<BulkWriteResult>
612
- ) {
613
- mergeBatchResults(batch, bulkResult, undefined, err.result);
614
-
615
- callback(
616
- new MongoBulkWriteError(
617
- {
618
- message: err.result.writeConcernError.errmsg,
619
- code: err.result.writeConcernError.code
620
- },
621
- new BulkWriteResult(bulkResult, isOrdered)
622
- )
623
- );
588
+ bulkOperation.s.batches.length = 0;
589
+
590
+ const writeResult = new BulkWriteResult(bulkOperation.s.bulkResult, bulkOperation.isOrdered);
591
+ bulkOperation.handleWriteError(writeResult);
592
+ return writeResult;
624
593
  }
625
594
 
626
595
  /**
@@ -875,8 +844,6 @@ export interface BulkWriteOptions extends CommandOperationOptions {
875
844
  let?: Document;
876
845
  }
877
846
 
878
- const executeCommandsAsync = promisify(executeCommands);
879
-
880
847
  /**
881
848
  * TODO(NODE-4063)
882
849
  * BulkWrites merge complexity is implemented in executeCommands
@@ -895,7 +862,7 @@ export class BulkWriteShimOperation extends AbstractOperation {
895
862
  return 'bulkWrite' as const;
896
863
  }
897
864
 
898
- execute(_server: Server, session: ClientSession | undefined): Promise<any> {
865
+ async execute(_server: Server, session: ClientSession | undefined): Promise<any> {
899
866
  if (this.options.session == null) {
900
867
  // An implicit session could have been created by 'executeOperation'
901
868
  // So if we stick it on finalOptions here, each bulk operation
@@ -903,7 +870,7 @@ export class BulkWriteShimOperation extends AbstractOperation {
903
870
  // an explicit session would be
904
871
  this.options.session = session;
905
872
  }
906
- return executeCommandsAsync(this.bulkOperation, this.options);
873
+ return await executeCommands(this.bulkOperation, this.options);
907
874
  }
908
875
  }
909
876
 
@@ -1239,33 +1206,26 @@ export abstract class BulkOperationBase {
1239
1206
  * Handles the write error before executing commands
1240
1207
  * @internal
1241
1208
  */
1242
- handleWriteError(callback: Callback<BulkWriteResult>, writeResult: BulkWriteResult): boolean {
1209
+ handleWriteError(writeResult: BulkWriteResult): void {
1243
1210
  if (this.s.bulkResult.writeErrors.length > 0) {
1244
1211
  const msg = this.s.bulkResult.writeErrors[0].errmsg
1245
1212
  ? this.s.bulkResult.writeErrors[0].errmsg
1246
1213
  : 'write operation failed';
1247
1214
 
1248
- callback(
1249
- new MongoBulkWriteError(
1250
- {
1251
- message: msg,
1252
- code: this.s.bulkResult.writeErrors[0].code,
1253
- writeErrors: this.s.bulkResult.writeErrors
1254
- },
1255
- writeResult
1256
- )
1215
+ throw new MongoBulkWriteError(
1216
+ {
1217
+ message: msg,
1218
+ code: this.s.bulkResult.writeErrors[0].code,
1219
+ writeErrors: this.s.bulkResult.writeErrors
1220
+ },
1221
+ writeResult
1257
1222
  );
1258
-
1259
- return true;
1260
1223
  }
1261
1224
 
1262
1225
  const writeConcernError = writeResult.getWriteConcernError();
1263
1226
  if (writeConcernError) {
1264
- callback(new MongoBulkWriteError(writeConcernError, writeResult));
1265
- return true;
1227
+ throw new MongoBulkWriteError(writeConcernError, writeResult);
1266
1228
  }
1267
-
1268
- return false;
1269
1229
  }
1270
1230
 
1271
1231
  abstract addToOperationsList(