Module: Mongo::Operation::Write::Bulk::LegacyMergable

Included in:
Delete::LegacyResult, Insert::LegacyResult, Update::LegacyResult
Defined in:
lib/mongo/operation/write/bulk/legacy_mergable.rb

Overview

This module contains common functionality for merging results from writes during a bulk operation. Used for server versions < 2.6.

Since:

  • 2.0.0

Instance Method Summary collapse

Instance Method Details

#aggregate_write_concern_errors(count) ⇒ Array

Aggregate the write concern errors returned from this result.

Examples:

Aggregate the write concern errors.

result.aggregate_write_concern_errors(4)

Parameters:

  • count (Integer)

    The number of documents already executed.

Returns:

  • (Array)

    The aggregate write concern errors.

Since:

  • 2.0.0



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/mongo/operation/write/bulk/legacy_mergable.rb', line 58

def aggregate_write_concern_errors(count)
  @replies.each_with_index.reduce(nil) do |errors, (reply, i)|
    if error = reply_write_errors?(reply)
      errors ||= []
      if note = reply.documents.first['wnote'] || reply.documents.first['jnote']
        code = reply.documents.first['code'] || Error::BAD_VALUE
        error_string = "#{code}: #{note}"
      elsif error == 'timeout'
        code = reply.documents.first['code'] || Error::UNKNOWN_ERROR
        error_string = "#{code}: #{error}"
      end
      errors << { 'errmsg' => error_string,
                  'index' => count + i,
                  'code' => code } if error_string
    end
    errors
  end if @replies
end

#aggregate_write_errors(count) ⇒ Array

Aggregate the write errors returned from this result.

Examples:

Aggregate the write errors.

result.aggregate_write_errors(0)

Parameters:

  • count (Integer)

    The number of documents already executed.

Returns:

  • (Array)

    The aggregate write errors.

Since:

  • 2.0.0



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/mongo/operation/write/bulk/legacy_mergable.rb', line 36

def aggregate_write_errors(count)
  @replies.each_with_index.reduce(nil) do |errors, (reply, i)|
    if reply_write_errors?(reply)
      errors ||= []
      errors << { 'errmsg' => reply.documents.first[Error::ERROR],
                  'index' => count + i,
                  'code' => reply.documents.first[Error::CODE] }
    end
    errors
  end if @replies
end