Class: Mongo::Database::View
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Forwardable
|
|
|
Instance Chain:
|
|
| Inherits: | Object |
| Defined in: | lib/mongo/database/view.rb |
Overview
A class representing a view of a database.
Class Method Summary
-
.new(database, options = {}) ⇒ View
constructor
Create the new database view.
Instance Attribute Summary
- #batch_size ⇒ Integer readonly
- #collection ⇒ Collection readonly
- #database readonly Internal use only Internal use only
- #limit ⇒ Integer readonly
- #operation_timeout_ms ⇒ Integer | nil | The timeout_ms value that was passed as an option to the view. readonly Internal use only Internal use only
::Mongo::CursorHost - Included
| #cursor | Returns the cursor associated with this view, if any. |
| #timeout_mode | |
Instance Method Summary
-
#aggregate(pipeline, options = {}) ⇒ Collection::View::Aggregation
Internal use only
Internal use only
Execute an aggregation on the database view.
-
#collection_names(options = {}) ⇒ Array<String>
Get all the names of the non-system collections in the database.
-
#list_collections(options = {}) ⇒ Array<Hash>
Get info on all the collections in the database.
- #operation_timeouts(opts = {}) ⇒ Hash Internal use only Internal use only
-
#timeout_ms ⇒ Integer | nil
The timeout_ms value to use for this operation; either specified as an option to the view, or inherited from the database.
- #collections_info(session, server_selector, options = {}, &block) private
- #collections_info_spec(session, options = {}) private
- #initial_query_op(session, options = {}) private
-
#send_initial_query(server, session, context, options = {}) ⇒ Operation::Result
private
Sends command that obtains information about the database.
::Mongo::Cursor::NonTailable - Included
| #cursor_type | These views are always non-tailable. |
| #timeout_mode | These views apply timeouts to each iteration of a cursor, as opposed to the entire lifetime of the cursor. |
::Mongo::CursorHost - Included
| #validate_timeout_mode! | Ensure the timeout mode is appropriate for other options that have been given. |
::Mongo::Retryable - Included
| #read_worker | Returns the read worker for handling retryable reads. |
| #select_server | This is a separate method to make it possible for the test suite to assert that server selection is performed during retry attempts. |
| #write_worker | Returns the write worker for handling retryable writes. |
| #deprioritize_server? | Whether the failed server should be deprioritized during server selection for a retry attempt. |
Constructor Details
.new(database, options = {}) ⇒ View
Create the new database view.
# File 'lib/mongo/database/view.rb', line 145
def initialize(database, = {}) @database = database @operation_timeout_ms = .delete(:timeout_ms) validate_timeout_mode!() @batch_size = nil @limit = nil @collection = @database[Database::COMMAND] end
Instance Attribute Details
#batch_size ⇒ Integer (readonly)
# File 'lib/mongo/database/view.rb', line 40
attr_reader :batch_size
#collection ⇒ Collection (readonly)
# File 'lib/mongo/database/view.rb', line 46
attr_reader :collection
#database (readonly)
# File 'lib/mongo/database/view.rb', line 157
attr_reader :database
#limit ⇒ Integer (readonly)
# File 'lib/mongo/database/view.rb', line 43
attr_reader :limit
#operation_timeout_ms ⇒ Integer | nil | The timeout_ms value that was passed as an
option to the view. (readonly)
# File 'lib/mongo/database/view.rb', line 163
attr_reader :operation_timeout_ms
Instance Method Details
#aggregate(pipeline, options = {}) ⇒ Collection::View::Aggregation
Execute an aggregation on the database view.
# File 'lib/mongo/database/view.rb', line 179
def aggregate(pipeline, = {}) Collection::View::Aggregation.new(self, pipeline, ) end
#collection_names(options = {}) ⇒ Array<String>
The set of returned collection names depends on the version of MongoDB server that fulfills the request.
Get all the names of the non-system collections in the database.
See https://mongodb.com/docs/manual/reference/command/listCollections/
for more information and usage.
# File 'lib/mongo/database/view.rb', line 77
def collection_names( = {}) @batch_size = [:batch_size] session = client.get_session() context = Operation::Context.new( client: client, session: session, operation_timeouts: operation_timeouts() ) cursor = read_with_retry_cursor(session, ServerSelector.primary, self, context: context) do |server| send_initial_query(server, session, context, .merge(name_only: true)) end cursor.map { |info| info['name'] } .reject { |name| name.start_with?('system.') || name.include?('$') } end
#collections_info(session, server_selector, options = {}, &block) (private)
# File 'lib/mongo/database/view.rb', line 206
def collections_info(session, server_selector, = {}, &block) description = nil context = Operation::Context.new( client: client, session: session, operation_timeouts: operation_timeouts() ) op = initial_query_op(session, ) tracer.trace_operation(op, context, op_name: 'listCollections') do cursor = read_with_retry_cursor(session, server_selector, self, context: context) do |server| # TODO take description from the connection used to send the query # once https://jira.mongodb.org/browse/RUBY-1601 is fixed. description = server.description send_initial_query(server, session, context, ) end # Filter out the system collections cursor.reject do |doc| doc['name'].start_with?('system.') || doc['name'].include?('$') end end end
#collections_info_spec(session, options = {}) (private)
# File 'lib/mongo/database/view.rb', line 229
def collections_info_spec(session, = {}) { selector: { listCollections: 1, cursor: batch_size ? { batchSize: batch_size } : {} }, db_name: @database.name, session: session }.tap do |spec| spec[:selector][:nameOnly] = true if [:name_only] spec[:selector][:filter] = [:filter] if [:filter] spec[:selector][:] = true if [:] spec[:comment] = [:comment] if [:comment] end end
#initial_query_op(session, options = {}) (private)
# File 'lib/mongo/database/view.rb', line 243
def initial_query_op(session, = {}) Operation::CollectionsInfo.new(collections_info_spec(session, )) end
#list_collections(options = {}) ⇒ Array<Hash>
The set of collections returned, and the schema of the information hash per collection, depends on the MongoDB server version that fulfills the request.
Get info on all the collections in the database.
# File 'lib/mongo/database/view.rb', line 123
def list_collections( = {}) session = client.get_session() collections_info(session, ServerSelector.primary, ) end
#operation_timeouts(opts = {}) ⇒ Hash
# File 'lib/mongo/database/view.rb', line 194
def operation_timeouts(opts = {}) {}.tap do |result| if opts[:timeout_ms] || operation_timeout_ms result[:operation_timeout_ms] = opts.delete(:timeout_ms) || operation_timeout_ms else result[:inherited_timeout_ms] = database.timeout_ms end end end
#send_initial_query(server, session, context, options = {}) ⇒ Operation::Result (private)
Sends command that obtains information about the database.
This command returns a cursor, so there could be additional commands, therefore this method is called send initial command.
# File 'lib/mongo/database/view.rb', line 272
def send_initial_query(server, session, context, = {}) opts = .dup execution_opts = {} if opts.key?(:deserialize_as_bson) execution_opts[:deserialize_as_bson] = opts.delete(:deserialize_as_bson) end if server.load_balancer? connection = server.pool.check_out(context: context) initial_query_op(session, opts).execute_with_connection( connection, context: context, options: execution_opts ) else initial_query_op(session, opts).execute( server, context: context, options: execution_opts ) end end
#timeout_ms ⇒ Integer | nil
The timeout_ms value to use for this operation; either specified as an option to the view, or inherited from the database.
# File 'lib/mongo/database/view.rb', line 187
def timeout_ms operation_timeout_ms || database.timeout_ms end