class Mongo::Operation::Insert::BulkResult

Defines custom behavior of results for an insert when sent as part of a bulk write.

@since 2.0.0

Attributes

inserted_ids[R]

Get the ids of the inserted documents.

@since 2.0.0

Public Class Methods

new(replies, ids) click to toggle source

Initialize a new result.

@example Instantiate the result.

Result.new(replies, inserted_ids)

@param [ Array<Protocol::Message> | nil ] replies The wire protocol replies, if any. @param [ Array<Object> ] ids The ids of the inserted documents.

@since 2.0.0

# File lib/mongo/operation/insert/bulk_result.rb, line 39
def initialize(replies, ids)
  @replies = [*replies] if replies
  if replies && replies.first && (doc = replies.first.documents.first)
    if errors = doc['writeErrors']
      # some documents were potentially inserted
      bad_indices = {}
      errors.map do |error|
        bad_indices[error['index']] = true
      end
      @inserted_ids = []
      ids.each_with_index do |id, index|
        if bad_indices[index].nil?
          @inserted_ids << id
        end
      end
    # I don't know if acknowledged? check here is necessary,
    # as best as I can tell it doesn't hurt
    elsif acknowledged? && successful?
      # We have a reply and the reply is successful and the
      # reply has no writeErrors - everything got inserted
      @inserted_ids = ids
    else
      # We have a reply and the reply is not successful and
      # it has no writeErrors - nothing got inserted.
      # If something got inserted the reply will be not successful
      # but will have writeErrors
      @inserted_ids = []
    end
  else
    # I don't think we should ever get here but who knows,
    # make this behave as old drivers did
    @inserted_ids = ids
  end
end

Public Instance Methods

inserted_id() click to toggle source

Gets the id of the document inserted.

@example Get id of the document inserted.

result.inserted_id

@return [ Object ] The id of the document inserted.

@since 2.0.0

# File lib/mongo/operation/insert/bulk_result.rb, line 94
def inserted_id
  inserted_ids.first
end
n_inserted() click to toggle source

Gets the number of documents inserted.

@example Get the number of documents inserted.

result.n_inserted

@return [ Integer ] The number of documents inserted.

@since 2.0.0

# File lib/mongo/operation/insert/bulk_result.rb, line 82
def n_inserted
  written_count
end