def find_one_and_delete(opts = {})
cmd = { :findAndModify => collection.name, :query => filter, :remove => true }
cmd[:fields] = projection if projection
cmd[:sort] = sort if sort
cmd[:maxTimeMS] = max_time_ms if max_time_ms
cmd[:writeConcern] = write_concern.options if write_concern
with_session(opts) do |session|
write_with_retry(session, write_concern) do |server, txn_num|
apply_collation!(cmd, server, opts)
Operation::Command.new(
:selector => cmd,
:db_name => database.name,
:session => session,
:txn_num => txn_num
).execute(server)
end
end.first['value']
end