module Mongo::Operation::Write

Shared behavior of operations that write (update, insert, delete).

@since 2.5.2 @api private

Public Instance Methods

bulk_execute(connection, context:) click to toggle source

Execute the bulk write operation.

@param [ Mongo::Server::Connection ] connection The connection over

which to send the operation.

@param [ Operation::Context ] context The operation context.

@return [ Mongo::Operation::Delete::BulkResult,

Mongo::Operation::Insert::BulkResult,
Mongo::Operation::Update::BulkResult ] The bulk result.

@since 2.5.2

# File lib/mongo/operation/shared/write.rb, line 64
def bulk_execute(connection, context:)
  Lint.assert_type(connection, Server::Connection)

  if connection.features.op_msg_enabled?
    self.class::OpMsg.new(spec).execute(connection, context: context).bulk_result
  else
    self.class::Command.new(spec).execute(connection, context: context).bulk_result
  end
end
execute(server, context:) click to toggle source

Execute the operation.

@param [ Mongo::Server ] server The server to send the operation to. @param [ Operation::Context ] context The operation context.

@return [ Mongo::Operation::Result ] The operation result.

@since 2.5.2

# File lib/mongo/operation/shared/write.rb, line 37
def execute(server, context:)
  server.with_connection(service_id: context.service_id) do |connection|
    validate!(connection)
    op = if connection.features.op_msg_enabled?
        self.class::OpMsg.new(spec)
      elsif !acknowledged_write?
        self.class::Legacy.new(spec)
      else
        self.class::Command.new(spec)
      end

    result = op.execute(connection, context: context)
    validate_result(result, connection, context)
  end
end

Private Instance Methods

validate!(connection) click to toggle source
# File lib/mongo/operation/shared/write.rb, line 76
def validate!(connection)
  if !acknowledged_write?
    if collation
      raise Error::UnsupportedCollation.new(
          Error::UnsupportedCollation::UNACKNOWLEDGED_WRITES_MESSAGE)
    end
    if array_filters(connection)
      raise Error::UnsupportedArrayFilters.new(
          Error::UnsupportedArrayFilters::UNACKNOWLEDGED_WRITES_MESSAGE)
    end
  end
end