@@ -10,7 +10,6 @@ const Document = require('./document');
1010const DocumentNotFoundError = require ( './error/notFound' ) ;
1111const EventEmitter = require ( 'events' ) . EventEmitter ;
1212const Kareem = require ( 'kareem' ) ;
13- const { MongoBulkWriteError } = require ( 'mongodb' ) ;
1413const MongooseBulkWriteError = require ( './error/bulkWriteError' ) ;
1514const MongooseError = require ( './error/index' ) ;
1615const ObjectParameterError = require ( './error/objectParameter' ) ;
@@ -69,6 +68,7 @@ const utils = require('./utils');
6968const minimize = require ( './helpers/minimize' ) ;
7069const MongooseBulkSaveIncompleteError = require ( './error/bulkSaveIncompleteError' ) ;
7170const ObjectExpectedError = require ( './error/objectExpected' ) ;
71+ const decorateBulkWriteResult = require ( './helpers/model/decorateBulkWriteResult' ) ;
7272
7373const modelCollectionSymbol = Symbol ( 'mongoose#Model#collection' ) ;
7474const modelDbSymbol = Symbol ( 'mongoose#Model#db' ) ;
@@ -3399,7 +3399,11 @@ Model.bulkWrite = async function bulkWrite(ops, options) {
33993399 const ordered = options . ordered == null ? true : options . ordered ;
34003400
34013401 if ( ops . length === 0 ) {
3402- return getDefaultBulkwriteResult ( ) ;
3402+ const BulkWriteResult = this . base . driver . get ( ) . BulkWriteResult ;
3403+ const bulkWriteResult = new BulkWriteResult ( getDefaultBulkwriteResult ( ) , false ) ;
3404+ bulkWriteResult . n = 0 ;
3405+ decorateBulkWriteResult ( bulkWriteResult , [ ] , [ ] ) ;
3406+ return bulkWriteResult ;
34033407 }
34043408
34053409 const validations = ops . map ( op => castBulkWrite ( this , op , options ) ) ;
@@ -3470,18 +3474,24 @@ Model.bulkWrite = async function bulkWrite(ops, options) {
34703474 'bulkWrite'
34713475 ) ;
34723476 }
3473- return getDefaultBulkwriteResult ( ) ;
3477+ const BulkWriteResult = this . base . driver . get ( ) . BulkWriteResult ;
3478+ const bulkWriteResult = new BulkWriteResult ( getDefaultBulkwriteResult ( ) , false ) ;
3479+ bulkWriteResult . result = getDefaultBulkwriteResult ( ) ;
3480+ decorateBulkWriteResult ( bulkWriteResult , validationErrors , results ) ;
3481+ return bulkWriteResult ;
34743482 }
34753483
34763484 let error ;
34773485 [ res , error ] = await this . $__collection . bulkWrite ( validOps , options ) .
34783486 then ( res => ( [ res , null ] ) ) .
34793487 catch ( error => ( [ null , error ] ) ) ;
34803488
3489+ for ( let i = 0 ; i < validOpIndexes . length ; ++ i ) {
3490+ results [ validOpIndexes [ i ] ] = null ;
3491+ }
34813492 if ( error ) {
34823493 if ( validationErrors . length > 0 ) {
3483- error . mongoose = error . mongoose || { } ;
3484- error . mongoose . validationErrors = validationErrors ;
3494+ decorateBulkWriteResult ( error , validationErrors , results ) ;
34853495 }
34863496
34873497 await new Promise ( ( resolve , reject ) => {
@@ -3495,9 +3505,6 @@ Model.bulkWrite = async function bulkWrite(ops, options) {
34953505 } ) ;
34963506 }
34973507
3498- for ( let i = 0 ; i < validOpIndexes . length ; ++ i ) {
3499- results [ validOpIndexes [ i ] ] = null ;
3500- }
35013508 if ( validationErrors . length > 0 ) {
35023509 if ( options . throwOnValidationError ) {
35033510 throw new MongooseBulkWriteError (
@@ -3507,9 +3514,7 @@ Model.bulkWrite = async function bulkWrite(ops, options) {
35073514 'bulkWrite'
35083515 ) ;
35093516 } else {
3510- res . mongoose = res . mongoose || { } ;
3511- res . mongoose . validationErrors = validationErrors ;
3512- res . mongoose . results = results ;
3517+ decorateBulkWriteResult ( res , validationErrors , results ) ;
35133518 }
35143519 }
35153520 }
@@ -3575,7 +3580,7 @@ Model.bulkSave = async function bulkSave(documents, options) {
35753580 ( err ) => ( { bulkWriteResult : null , bulkWriteError : err } )
35763581 ) ;
35773582 // If not a MongoBulkWriteError, treat this as all documents failed to save.
3578- if ( bulkWriteError != null && ! ( bulkWriteError instanceof MongoBulkWriteError ) ) {
3583+ if ( bulkWriteError != null && bulkWriteError . name !== ' MongoBulkWriteError' ) {
35793584 throw bulkWriteError ;
35803585 }
35813586
0 commit comments