def count(opts = {})
cmd = { :count => collection.name, :query => filter }
cmd[:skip] = opts[:skip] if opts[:skip]
cmd[:hint] = opts[:hint] if opts[:hint]
cmd[:limit] = opts[:limit] if opts[:limit]
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::Count.new({
:selector => cmd,
:db_name => database.name,
:options => {:limit => -1},
:read => read_pref,
:session => session
}).execute(server)
end.n.to_i
end
end