Class: Mongo::Error::BulkWriteError
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Error
|
|
|
Instance Chain:
self,
Error
|
|
| Inherits: |
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.
Class Method Summary
-
.new(result, server_addresses: nil) ⇒ BulkWriteError
constructor
Instantiate the new exception.
Instance Attribute Summary
- #result ⇒ BSON::Document readonly
- #server_addresses ⇒ Array<String> readonly
Instance Method Summary
-
#build_message ⇒ String
private
Generates an error message when there are multiple write errors.
- #normalize_server_addresses(value) private
Constructor Details
.new(result, server_addresses: nil) ⇒ BulkWriteError
Instantiate the new exception.
# File 'lib/mongo/error/bulk_write_error.rb', line 54
def initialize(result, server_addresses: nil) @result = result @server_addresses = normalize_server_addresses(server_addresses) # Exception constructor behaves differently for a nil argument and # for no argument. Avoid passing nil explicitly. = ? super() : super() end
Instance Attribute Details
#result ⇒ BSON::Document (readonly)
# File 'lib/mongo/error/bulk_write_error.rb', line 35
attr_reader :result
#server_addresses ⇒ Array<String> (readonly)
# File 'lib/mongo/error/bulk_write_error.rb', line 40
attr_reader :server_addresses
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 84
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 fragment = "Multiple errors: #{fragment}" if errors.length > 1 if Mongo.include_server_address_in_errors && @server_addresses.any? fragment = "#{fragment} (on #{@server_addresses.join(', ')})" end fragment end
#normalize_server_addresses(value) (private)
# File 'lib/mongo/error/bulk_write_error.rb', line 112
def normalize_server_addresses(value) return [] if value.nil? Array(value).filter_map do |entry| case entry when String then entry when Mongo::Address then entry.seed when Mongo::Server::Description then entry.address&.seed else raise ArgumentError, "server_addresses entries must be String, Mongo::Address, or Mongo::Server::Description; got #{entry.class}" end end.uniq end