Exception: Mongo::Error::BulkWriteError
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
::Mongo::Error,
StandardError
|
|
|
Instance Chain:
|
|
| Inherits: |
Mongo::Error
|
| Defined in: | lib/mongo/error/bulk_write_error.rb |
Overview
A bulk operation that resulted in a BulkWriteError may have written some of the documents to the database. If the bulk write was unordered, writes may have also continued past the write that produced a BulkWriteError.
Exception raised if there are write errors upon executing a bulk operation.
Unlike OperationFailure, BulkWriteError does not currently expose individual error components (such as the error code). The result document (which can be obtained using the #result attribute) provides detailed error information and can be examined by the application if desired.
Constant Summary
::Mongo::Error - Inherited
BAD_VALUE, CODE, CURSOR_NOT_FOUND, ERR, ERRMSG, ERROR, TRANSIENT_TRANSACTION_ERROR_LABEL, UNKNOWN_ERROR, UNKNOWN_TRANSACTION_COMMIT_RESULT_LABEL, WRITE_CONCERN_ERROR, WRITE_CONCERN_ERRORS, WRITE_ERRORS
Class Method Summary
-
.new(result) ⇒ BulkWriteError
constructor
Instantiate the new exception.
::Mongo::Error - Inherited
Instance Attribute Summary
- #result ⇒ BSON::Document readonly
::Mongo::Error - Inherited
| #change_stream_resumable? | Can the change stream on which this error occurred be resumed, provided the operation that triggered this error was a getMore? |
| #network_error? | |
ChangeStreamResumable - Included
| #change_stream_resumable? | Can the change stream on which this error occurred be resumed, provided the operation that triggered this error was a getMore? |
WriteRetryable - Included
Notable - Included
| #connection_global_id | Returns global id of the connection on which the error occurred. |
| #generation | Returns connection pool generation for the connection on which the error occurred. |
| #service_id | Returns service id for the connection on which the error occurred. |
Instance Method Summary
-
#build_message ⇒ String
private
Generates an error message when there are multiple write errors.
::Mongo::Error - Inherited
| #write_concern_error_label? | Does the write concern error have the given label? |
| #write_concern_error_labels | The set of error labels associated with the write concern error. |
Labelable - Included
| #add_label | Adds the specified label to the error instance, if the label is not already in the set of labels. |
| #label? | Does the error have the given label? |
| #labels | Gets the set of labels associated with the error. |
Notable - Included
| #add_note, | |
| #add_notes | Allows multiple notes to be added in a single call, for convenience. |
| #notes | Returns an array of strings with additional information about the exception. |
| #to_s, #notes_tail | |
Constructor Details
.new(result) ⇒ BulkWriteError
Instantiate the new exception.
Instance Attribute Details
#result ⇒ BSON::Document (readonly)
# File 'lib/mongo/error/bulk_write_error.rb', line 38
attr_reader :result
Instance Method Details
#build_message ⇒ String (private)
Generates an error message when there are multiple write errors.
col has validation { ‘validator’ => { ‘x’ => { ‘$type’ => ‘string’ } } } col.insert_many([1, 2], ordered: false)
Multiple errors:
[121]: Document failed validation --
{"failingDocumentId":1,"details":{"operatorName":"$type",
"specifiedAs":{"x":{"$type":"string"}},"reason":"field was
missing"}};
[121]: Document failed validation --
{"failingDocumentId":2, "details":{"operatorName":"$type",
"specifiedAs":{"x":{"$type":"string"}}, "reason":"field was
missing"}}
# File 'lib/mongo/error/bulk_write_error.rb', line 76
def errors = @result['writeErrors'] return nil unless errors fragment = "" cut_short = false errors.first(10).each_with_index do |error, i| fragment += "; " if fragment.length > 0 fragment += "[#{error['code']}]: #{error['errmsg']}" fragment += " -- #{error['errInfo'].to_json}" if error['errInfo'] if fragment.length > 3000 cut_short = i < [9, errors.length].min break end end fragment += '...' if errors.length > 10 || cut_short if errors.length > 1 fragment = "Multiple errors: #{fragment}" end fragment end