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 69
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 36
def execute(server, context:)
  server.with_connection(connection_global_id: context.connection_global_id) do |connection|
    execute_with_connection(connection, context: context)
  end
end
execute_with_connection(connection, context:) click to toggle source

Execute the operation.

@param [ Mongo::Server::Connection ] connection The connection to send

the operation through.

@param [ Operation::Context ] context The operation context. @param [ Hash ] options Operation execution options.

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

# File lib/mongo/operation/shared/write.rb, line 50
def execute_with_connection(connection, context:)
  validate!(connection)
  op = self.class::OpMsg.new(spec)

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

Private Instance Methods

validate!(connection) click to toggle source
# File lib/mongo/operation/shared/write.rb, line 81
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