class Mongo::Database::View
A class representing a view of a database.
@since 2.0.0
Attributes
@return [ Integer ] #batch_size The size of the batch of results
when sending the listCollections command.
@return [ Collection ] collection The command collection.
@return [ Integer ] limit The limit when sending a command.
Public Class Methods
Create the new database view.
@example Create the new database view.
View::Index.new(database)
@param [ Database ] database The database.
@since 2.0.0
# File lib/mongo/database/view.rb, line 87 def initialize(database) @database = database @batch_size = nil @limit = nil @collection = @database[Database::COMMAND] end
Public Instance Methods
Get all the names of the non-system collections in the database.
@example Get the collection names.
database.collection_names
@param [ Hash ] options Options for the listCollections command.
@option options [ Integer ] :batch_size The batch size for results
returned from the listCollections command.
@return [ Array<String> ] The names of all non-system collections.
@since 2.0.0
# File lib/mongo/database/view.rb, line 51 def collection_names(options = {}) @batch_size = options[:batch_size] server = next_primary(false) @limit = -1 if server.features.list_collections_enabled? session = client.send(:get_session, options) collections_info(server, session, name_only: true).collect do |info| if server.features.list_collections_enabled? info[Database::NAME] else (info[Database::NAME] && info[Database::NAME].sub("#{@database.name}.", '')) end end end
Get info on all the collections in the database.
@example Get info on each collection.
database.list_collections
@return [ Array<Hash> ] Info for each collection in the database.
@since 2.0.5
# File lib/mongo/database/view.rb, line 74 def list_collections session = client.send(:get_session) collections_info(next_primary(false), session) end
Private Instance Methods
# File lib/mongo/database/view.rb, line 96 def collections_info(server, session, options = {}, &block) cursor = Cursor.new(self, send_initial_query(server, session, options), server, session: session) cursor.each do |doc| yield doc end if block_given? cursor.to_enum end
# File lib/mongo/database/view.rb, line 104 def collections_info_spec(session, options = {}) { selector: { listCollections: 1, cursor: batch_size ? { batchSize: batch_size } : {} }, db_name: @database.name, session: session }.tap { |spec| spec[:selector][:nameOnly] = true if options[:name_only] } end
# File lib/mongo/database/view.rb, line 113 def initial_query_op(session, options = {}) Operation::CollectionsInfo.new(collections_info_spec(session, options)) end
# File lib/mongo/database/view.rb, line 117 def send_initial_query(server, session, options = {}) initial_query_op(session, options).execute(server) end