@@ -285,7 +285,25 @@ cursor collection::aggregate(const pipeline& pipeline, const options::aggregate&
285
285
286
286
stdx::optional<result::insert_one> collection::insert_one (view_or_value document,
287
287
const options::insert& options) {
288
- class bulk_write bulk_op (false );
288
+
289
+ // TODO: We should consider making it possible to convert from an options::insert into
290
+ // an options::bulk_write at the type level, removing the need to re-iterate this code
291
+ // many times here and below.
292
+ //
293
+ // See comments in: https://github.com/mongodb/mongo-cxx-driver/pull/409
294
+
295
+ options::bulk_write bulk_opts;
296
+ bulk_opts.ordered (false );
297
+
298
+ if (options.write_concern ()) {
299
+ bulk_opts.write_concern (*options.write_concern ());
300
+ }
301
+
302
+ if (options.bypass_document_validation ()) {
303
+ bulk_opts.bypass_document_validation (*options.bypass_document_validation ());
304
+ }
305
+
306
+ class bulk_write bulk_op (bulk_opts);
289
307
bsoncxx::document::element oid{};
290
308
291
309
bsoncxx::builder::stream::document new_document;
@@ -299,14 +317,6 @@ stdx::optional<result::insert_one> collection::insert_one(view_or_value document
299
317
oid = document.view ()[" _id" ];
300
318
}
301
319
302
- if (options.write_concern ()) {
303
- bulk_op.write_concern (*options.write_concern ());
304
- }
305
-
306
- if (options.bypass_document_validation ()) {
307
- bulk_op.bypass_document_validation (*options.bypass_document_validation ());
308
- }
309
-
310
320
auto result = bulk_write (bulk_op);
311
321
if (!result) {
312
322
return stdx::optional<result::insert_one>();
@@ -319,17 +329,20 @@ stdx::optional<result::insert_one> collection::insert_one(view_or_value document
319
329
stdx::optional<result::replace_one> collection::replace_one (view_or_value filter,
320
330
view_or_value replacement,
321
331
const options::update& options) {
322
- class bulk_write bulk_op (false );
323
- model::replace_one replace_op (filter, replacement);
332
+ options::bulk_write bulk_opts;
333
+ bulk_opts.ordered (false );
334
+
335
+ if (options.bypass_document_validation ())
336
+ bulk_opts.bypass_document_validation (*options.bypass_document_validation ());
337
+ if (options.write_concern ()) bulk_opts.write_concern (*options.write_concern ());
324
338
339
+ class bulk_write bulk_op (bulk_opts);
340
+
341
+ model::replace_one replace_op (filter, replacement);
325
342
if (options.upsert ()) replace_op.upsert (options.upsert ().value ());
326
343
327
344
bulk_op.append (replace_op);
328
345
329
- if (options.bypass_document_validation ())
330
- bulk_op.bypass_document_validation (*options.bypass_document_validation ());
331
- if (options.write_concern ()) bulk_op.write_concern (*options.write_concern ());
332
-
333
346
auto result = bulk_write (bulk_op);
334
347
if (!result) {
335
348
return stdx::optional<result::replace_one>();
@@ -340,17 +353,20 @@ stdx::optional<result::replace_one> collection::replace_one(view_or_value filter
340
353
341
354
stdx::optional<result::update> collection::update_many (view_or_value filter, view_or_value update,
342
355
const options::update& options) {
343
- class bulk_write bulk_op ( false ) ;
344
- model::update_many update_op (filter, update );
356
+ options:: bulk_write bulk_opts ;
357
+ bulk_opts. ordered ( false );
345
358
359
+ if (options.bypass_document_validation ())
360
+ bulk_opts.bypass_document_validation (*options.bypass_document_validation ());
361
+ if (options.write_concern ()) bulk_opts.write_concern (*options.write_concern ());
362
+
363
+ class bulk_write bulk_op (bulk_opts);
364
+
365
+ model::update_many update_op (filter, update);
346
366
if (options.upsert ()) update_op.upsert (options.upsert ().value ());
347
367
348
368
bulk_op.append (update_op);
349
369
350
- if (options.bypass_document_validation ())
351
- bulk_op.bypass_document_validation (*options.bypass_document_validation ());
352
- if (options.write_concern ()) bulk_op.write_concern (*options.write_concern ());
353
-
354
370
auto result = bulk_write (bulk_op);
355
371
if (!result) {
356
372
return stdx::optional<result::update>();
@@ -361,12 +377,17 @@ stdx::optional<result::update> collection::update_many(view_or_value filter, vie
361
377
362
378
stdx::optional<result::delete_result> collection::delete_many (
363
379
view_or_value filter, const options::delete_options& options) {
364
- class bulk_write bulk_op (false );
380
+
381
+ options::bulk_write bulk_opts;
382
+ bulk_opts.ordered (false );
383
+
384
+ if (options.write_concern ()) bulk_opts.write_concern (*options.write_concern ());
385
+
386
+ class bulk_write bulk_op (bulk_opts);
387
+
365
388
model::delete_many delete_op (filter);
366
389
bulk_op.append(delete_op);
367
390
368
- if (options.write_concern ()) bulk_op.write_concern (*options.write_concern ());
369
-
370
391
auto result = bulk_write (bulk_op);
371
392
if (!result) {
372
393
return stdx::optional<result::delete_result>();
@@ -377,17 +398,21 @@ stdx::optional<result::delete_result> collection::delete_many(
377
398
378
399
stdx::optional<result::update> collection::update_one (view_or_value filter, view_or_value update,
379
400
const options::update& options) {
380
- class bulk_write bulk_op (false );
381
- model::update_one update_op (filter, update);
382
401
402
+ options::bulk_write bulk_opts;
403
+ bulk_opts.ordered (false );
404
+
405
+ if (options.bypass_document_validation ())
406
+ bulk_opts.bypass_document_validation (*options.bypass_document_validation ());
407
+ if (options.write_concern ()) bulk_opts.write_concern (*options.write_concern ());
408
+
409
+ class bulk_write bulk_op (bulk_opts);
410
+
411
+ model::update_one update_op (filter, update);
383
412
if (options.upsert ()) update_op.upsert (options.upsert ().value ());
384
413
385
414
bulk_op.append (update_op);
386
415
387
- if (options.bypass_document_validation ())
388
- bulk_op.bypass_document_validation (*options.bypass_document_validation ());
389
- if (options.write_concern ()) bulk_op.write_concern (*options.write_concern ());
390
-
391
416
auto result = bulk_write (bulk_op);
392
417
if (!result) {
393
418
return stdx::optional<result::update>();
@@ -398,12 +423,17 @@ stdx::optional<result::update> collection::update_one(view_or_value filter, view
398
423
399
424
stdx::optional<result::delete_result> collection::delete_one (
400
425
view_or_value filter, const options::delete_options& options) {
401
- class bulk_write bulk_op (false );
426
+
427
+ options::bulk_write bulk_opts;
428
+ bulk_opts.ordered (false );
429
+
430
+ if (options.write_concern ()) bulk_opts.write_concern (*options.write_concern ());
431
+
432
+ class bulk_write bulk_op (bulk_opts);
433
+
402
434
model::delete_one delete_op (filter);
403
435
bulk_op.append(delete_op);
404
436
405
- if (options.write_concern ()) bulk_op.write_concern (*options.write_concern ());
406
-
407
437
auto result = bulk_write (bulk_op);
408
438
if (!result) {
409
439
return stdx::optional<result::delete_result>();
0 commit comments