def distinct(field_name, opts = {})
cmd = { :distinct => collection.name,
:key => field_name.to_s,
:query => filter }
cmd[:maxTimeMS] = opts[:max_time_ms] if opts[:max_time_ms]
cmd[:readConcern] = collection.read_concern if collection.read_concern
Mongo::Lint.validate_underscore_read_preference(opts[:read])
read_pref = opts[:read] || read_preference
selector = ServerSelector.get(read_pref || server_selector)
with_session(opts) do |session|
read_with_retry(session) do
server = selector.select_server(cluster)
apply_collation!(cmd, server, opts)
Operation::Distinct.new({
:selector => cmd,
:db_name => database.name,
:options => {:limit => -1},
:read => read_pref,
:session => session
}).execute(server)
end.first['values']
end
end