diff --git a/lib/connection/pool.js b/lib/connection/pool.js index d2004b10b..5d044c652 100644 --- a/lib/connection/pool.js +++ b/lib/connection/pool.js @@ -581,11 +581,11 @@ function messageHandler(self) { } if (responseDoc.writeConcernError) { - return handleOperationCallback( - self, - workItem.cb, - new MongoWriteConcernError(responseDoc.writeConcernError) - ); + const err = + responseDoc.ok === 1 + ? new MongoWriteConcernError(responseDoc.writeConcernError, responseDoc) + : new MongoWriteConcernError(responseDoc.writeConcernError); + return handleOperationCallback(self, workItem.cb, err); } } diff --git a/lib/error.js b/lib/error.js index 30ac0e6e0..67c2d7107 100644 --- a/lib/error.js +++ b/lib/error.js @@ -130,13 +130,19 @@ function isRetryableError(error) { * * @class * @param {Error|string|object} message The error message + * @param {object} result The result document (provided if ok: 1) * @property {string} message The error message + * @property {object} [result] The result document (provided if ok: 1) * @return {MongoWriteConcernError} A MongoWriteConcernError instance * @extends {MongoError} */ -const MongoWriteConcernError = function(message) { +const MongoWriteConcernError = function(message, result) { MongoError.call(this, message); this.name = 'MongoWriteConcernError'; + + if (result != null) { + this.result = result; + } }; util.inherits(MongoWriteConcernError, MongoError);