4242import com .mongodb .client .model .IndexOptions ;
4343import com .mongodb .client .model .InsertManyOptions ;
4444import com .mongodb .client .model .InsertOneModel ;
45+ import com .mongodb .client .model .InsertOneOptions ;
4546import com .mongodb .client .model .RenameCollectionOptions ;
4647import com .mongodb .client .model .ReplaceOneModel ;
4748import com .mongodb .client .model .ReturnDocument ;
@@ -275,21 +276,28 @@ public void bulkWrite(final List<? extends WriteModel<? extends TDocument>> requ
275276 writeRequests .add (writeRequest );
276277 }
277278
278- executor .execute (new MixedBulkWriteOperation (namespace , writeRequests , options .isOrdered (), writeConcern ), callback );
279+ executor .execute (new MixedBulkWriteOperation (namespace , writeRequests , options .isOrdered (), writeConcern )
280+ .bypassDocumentValidation (options .getBypassDocumentValidation ()), callback );
279281 }
280282
281283 @ Override
282284 public void insertOne (final TDocument document , final SingleResultCallback <Void > callback ) {
285+ insertOne (document , new InsertOneOptions (), callback );
286+ }
287+
288+ @ Override
289+ public void insertOne (final TDocument document , final InsertOneOptions options , final SingleResultCallback <Void > callback ) {
283290 TDocument insertDocument = document ;
284291 if (getCodec () instanceof CollectibleCodec ) {
285292 ((CollectibleCodec <TDocument >) getCodec ()).generateIdIfAbsentFromDocument (insertDocument );
286293 }
287- executeSingleWriteRequest (new InsertRequest (documentToBsonDocument (insertDocument )), new SingleResultCallback <BulkWriteResult >() {
288- @ Override
289- public void onResult (final BulkWriteResult result , final Throwable t ) {
290- callback .onResult (null , t );
291- }
292- });
294+ executeSingleWriteRequest (new InsertRequest (documentToBsonDocument (insertDocument )), options .getBypassDocumentValidation (),
295+ new SingleResultCallback <BulkWriteResult >() {
296+ @ Override
297+ public void onResult (final BulkWriteResult result , final Throwable t ) {
298+ callback .onResult (null , t );
299+ }
300+ });
293301 }
294302
295303 @ Override
@@ -307,13 +315,14 @@ public void insertMany(final List<? extends TDocument> documents, final InsertMa
307315 }
308316 requests .add (new InsertRequest (documentToBsonDocument (document )));
309317 }
310- executor .execute (new MixedBulkWriteOperation (namespace , requests , options .isOrdered (), writeConcern ),
311- errorHandlingCallback (new SingleResultCallback <BulkWriteResult >() {
312- @ Override
313- public void onResult (final BulkWriteResult result , final Throwable t ) {
314- callback .onResult (null , t );
315- }
316- }));
318+ executor .execute (new MixedBulkWriteOperation (namespace , requests , options .isOrdered (), writeConcern )
319+ .bypassDocumentValidation (options .getBypassDocumentValidation ()), errorHandlingCallback (
320+ new SingleResultCallback <BulkWriteResult >() {
321+ @ Override
322+ public void onResult (final BulkWriteResult result , final Throwable t ) {
323+ callback .onResult (null , t );
324+ }
325+ }));
317326 }
318327
319328 @ Override
@@ -335,7 +344,7 @@ public void replaceOne(final Bson filter, final TDocument replacement, final Sin
335344 public void replaceOne (final Bson filter , final TDocument replacement , final UpdateOptions options ,
336345 final SingleResultCallback <UpdateResult > callback ) {
337346 executeSingleWriteRequest (new UpdateRequest (toBsonDocument (filter ), documentToBsonDocument (replacement ), WriteRequest .Type .REPLACE )
338- .upsert (options .isUpsert ()),
347+ .upsert (options .isUpsert ()), options . getBypassDocumentValidation (),
339348 new SingleResultCallback <BulkWriteResult >() {
340349 @ Override
341350 public void onResult (final BulkWriteResult result , final Throwable t ) {
@@ -398,7 +407,8 @@ public void findOneAndReplace(final Bson filter, final TDocument replacement, fi
398407 .sort (toBsonDocument (options .getSort ()))
399408 .returnOriginal (options .getReturnDocument () == ReturnDocument .BEFORE )
400409 .upsert (options .isUpsert ())
401- .maxTime (options .getMaxTime (MILLISECONDS ), MILLISECONDS ), callback );
410+ .maxTime (options .getMaxTime (MILLISECONDS ), MILLISECONDS )
411+ .bypassDocumentValidation (options .getBypassDocumentValidation ()), callback );
402412 }
403413
404414 @ Override
@@ -415,7 +425,8 @@ public void findOneAndUpdate(final Bson filter, final Bson update, final FindOne
415425 .sort (toBsonDocument (options .getSort ()))
416426 .returnOriginal (options .getReturnDocument () == ReturnDocument .BEFORE )
417427 .upsert (options .isUpsert ())
418- .maxTime (options .getMaxTime (MILLISECONDS ), MILLISECONDS ), callback );
428+ .maxTime (options .getMaxTime (MILLISECONDS ), MILLISECONDS )
429+ .bypassDocumentValidation (options .getBypassDocumentValidation ()), callback );
419430 }
420431
421432 @ Override
@@ -517,40 +528,44 @@ public void renameCollection(final MongoNamespace newCollectionNamespace, final
517528 }
518529
519530 private void delete (final Bson filter , final boolean multi , final SingleResultCallback <DeleteResult > callback ) {
520- executeSingleWriteRequest (new DeleteRequest (toBsonDocument (filter )).multi (multi ), new SingleResultCallback <BulkWriteResult >() {
521- @ Override
522- public void onResult (final BulkWriteResult result , final Throwable t ) {
523- if (t != null ) {
524- callback .onResult (null , t );
525- } else {
526- if (result .wasAcknowledged ()) {
527- callback .onResult (DeleteResult .acknowledged (result .getDeletedCount ()), null );
528- } else {
529- callback .onResult (DeleteResult .unacknowledged (), null );
531+ executeSingleWriteRequest (new DeleteRequest (toBsonDocument (filter )).multi (multi ), null ,
532+ new SingleResultCallback <BulkWriteResult >() {
533+ @ Override
534+ public void onResult (final BulkWriteResult result , final Throwable t ) {
535+ if (t != null ) {
536+ callback .onResult (null , t );
537+ } else {
538+ if (result .wasAcknowledged ()) {
539+ callback .onResult (DeleteResult .acknowledged (result .getDeletedCount ()), null );
540+ } else {
541+ callback .onResult (DeleteResult .unacknowledged (), null );
542+ }
543+
544+ }
530545 }
531-
532- }
533- }
534- });
546+ });
535547 }
536548
537549 private void update (final Bson filter , final Bson update , final UpdateOptions updateOptions , final boolean multi ,
538550 final SingleResultCallback <UpdateResult > callback ) {
539551 executeSingleWriteRequest (new UpdateRequest (toBsonDocument (filter ), toBsonDocument (update ), WriteRequest .Type .UPDATE )
540- .upsert (updateOptions .isUpsert ()).multi (multi ), new SingleResultCallback <BulkWriteResult >() {
541- @ Override
542- public void onResult (final BulkWriteResult result , final Throwable t ) {
543- if (t != null ) {
544- callback .onResult (null , t );
545- } else {
546- callback .onResult (toUpdateResult (result ), null );
547- }
548- }
549- });
552+ .upsert (updateOptions .isUpsert ()).multi (multi ), updateOptions .getBypassDocumentValidation (),
553+ new SingleResultCallback <BulkWriteResult >() {
554+ @ Override
555+ public void onResult (final BulkWriteResult result , final Throwable t ) {
556+ if (t != null ) {
557+ callback .onResult (null , t );
558+ } else {
559+ callback .onResult (toUpdateResult (result ), null );
560+ }
561+ }
562+ });
550563 }
551564
552- private void executeSingleWriteRequest (final WriteRequest request , final SingleResultCallback <BulkWriteResult > callback ) {
553- executor .execute (new MixedBulkWriteOperation (namespace , asList (request ), true , writeConcern ),
565+ private void executeSingleWriteRequest (final WriteRequest request , final Boolean bypassDocumentValidation ,
566+ final SingleResultCallback <BulkWriteResult > callback ) {
567+ executor .execute (new MixedBulkWriteOperation (namespace , asList (request ), true , writeConcern )
568+ .bypassDocumentValidation (bypassDocumentValidation ),
554569 new SingleResultCallback <BulkWriteResult >() {
555570 @ Override
556571 public void onResult (final BulkWriteResult result , final Throwable t ) {
0 commit comments