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 @api semiprivate

Attributes

inserted_ids[R]

Get the ids of the inserted documents.

@since 2.0.0 @api public

Public Class Methods

new(replies, connection_description, connection_global_id, 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 [ Server::Description ] connection_description

Server description of the server that performed the operation that
this result is for.

@param [ Integer ] connection_global_id

Global id of the connection on which the operation that
this result is for was performed.

@param [ Array<Object> ] ids The ids of the inserted documents.

@since 2.0.0 @api private

# File lib/mongo/operation/insert/bulk_result.rb, line 50
def initialize(replies, connection_description, connection_global_id, ids)
  @replies = [*replies] if replies
  @connection_description = connection_description
  @connection_global_id = connection_global_id
  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 @api public

# File lib/mongo/operation/insert/bulk_result.rb, line 109
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 @api public

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