Class: Mongo::Database
| Relationships & Source Files | |
| Namespace Children | |
| Classes: | |
| Super Chains via Extension / Inclusion / Inheritance | |
| Class Chain: 
          self,
          Forwardable
         | |
| Instance Chain: 
          self,
           Retryable | |
| Inherits: | Object | 
| Defined in: | lib/mongo/database.rb, lib/mongo/database/view.rb | 
Overview
Represents a database on the db server and operations that can execute on it at this level.
Constant Summary
- 
    ADMIN =
    # File 'lib/mongo/database.rb', line 33The admin database name. 'admin'.freeze 
- 
    COMMAND =
    # File 'lib/mongo/database.rb', line 38The “collection” that database commands operate against. '$cmd'.freeze 
- 
    DATABASES =
    # File 'lib/mongo/database.rb', line 54Databases constant. 'databases'.freeze 
- 
    DEFAULT_OPTIONS =
    # File 'lib/mongo/database.rb', line 43The default database options. Options::Redacted.new(:database => ADMIN).freeze 
- 
    NAME =
    # File 'lib/mongo/database.rb', line 49Deprecated.Databasename field constant.'name'.freeze 
- 
    NAMESPACES =
    # File 'lib/mongo/database.rb', line 59The name of the collection that holds all the collection names. 'system.namespaces'.freeze 
Class Method Summary
- 
    
      .create(client)  ⇒ Database 
    
    Internal use only
    Internal use only
    Create a database for the provided client, for use when we don’t want the client’s original database instance to be the same. 
- 
    
      .new(client, name, options = {})  ⇒ Database 
    
    constructor
    Instantiate a new database object. 
Instance Attribute Summary
- #client ⇒ Client readonly
- #name ⇒ String readonly
- #options ⇒ Hash readonly
Instance Method Summary
- 
    
      #==(other)  ⇒ true, false 
    
    Check equality of the database object against another. 
- 
    
      #[](collection_name, options = {})  ⇒ Mongo::Collection 
      (also: #collection)
    
    Get a collection in this database by the provided name. 
- 
    
      #aggregate(pipeline, options = {})  ⇒ Collection::View::Aggregation 
    
    Perform an aggregation on the database. 
- #cluster ⇒ Mongo::Server
- 
    
      #collection(collection_name, options = {})  
    
    Alias for #[]. 
- 
    
      #collection_names(options = {})  ⇒ Array<String> 
    
    Get all the names of the non-system collections in the database. 
- 
    
      #collections(options = {})  ⇒ Array<Mongo::Collection> 
    
    Get all the non-system collections that belong to this database. 
- 
    
      #command(operation, opts = {})  ⇒ Mongo::Operation::Result 
    
    Execute a command on the database. 
- 
    
      #drop(options = {})  ⇒ Result 
    
    Drop the database and all its associated information. 
- 
    
      #fs(options = {})  ⇒ Grid::FSBucket 
    
    Get the Grid“filesystem” for this database.
- 
    
      #inspect  ⇒ String 
    
    Get a pretty printed string inspection for the database. 
- 
    
      #list_collections(options = {})  ⇒ Array<Hash> 
    
    Get info on all the non-system collections in the database. 
- #operation_timeouts(opts) ⇒ Hash Internal use only Internal use only
- 
    
      #read_command(operation, opts = {})  ⇒ Hash 
    
    Internal use only
    Internal use only
    Execute a read command on the database, retrying the read if necessary. 
- #timeout_ms ⇒ Integer | nil Internal use only Internal use only
- 
    
      #users  ⇒ View::User 
    
    Get the user view for this database. 
- 
    
      #watch(pipeline = [], options = {})  ⇒ ChangeStream 
    
    As of version 3.6 of the MongoDB server, a “$changeStream“ pipeline stage is supported in the aggregation framework. 
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. | 
Constructor Details
    .new(client, name, options = {})  ⇒ Database 
  
Instantiate a new database object.
# File 'lib/mongo/database.rb', line 362
def initialize(client, name, = {}) raise Error::InvalidDatabaseName.new unless name if Lint.enabled? && !(name.is_a?(String) || name.is_a?(Symbol)) raise "Database name must be a string or a symbol: #{name}" end @client = client @name = name.to_s.freeze @options = .freeze end
Class Method Details
    .create(client)  ⇒ Database 
  
  Create a database for the provided client, for use when we don’t want the client’s original database instance to be the same.
Instance Attribute Details
#client ⇒ Client (readonly)
# File 'lib/mongo/database.rb', line 62
attr_reader :client
    #name  ⇒ String  (readonly)
  
# File 'lib/mongo/database.rb', line 65
attr_reader :name
    #options  ⇒ Hash  (readonly)
  
# File 'lib/mongo/database.rb', line 68
attr_reader :
Instance Method Details
    #==(other)  ⇒ true, false 
  
Check equality of the database object against another. Will simply check if the names are the same.
#[](collection_name, options = {}) ⇒ Mongo::Collection Also known as: #collection
Get a collection in this database by the provided name.
# File 'lib/mongo/database.rb', line 110
def [](collection_name, = {}) if [:server_api] raise ArgumentError, 'The :server_api option cannot be specified for collection objects. It can only be specified on Client level' end Collection.new(self, collection_name, ) end
#aggregate(pipeline, options = {}) ⇒ Collection::View::Aggregation
Perform an aggregation on the database.
#cluster ⇒ Mongo::Server
# File 'lib/mongo/database.rb', line 80
def_delegators :cluster, :next_primary
#collection(collection_name, options = {})
Alias for #[].
# File 'lib/mongo/database.rb', line 116
alias_method :collection, :[]
    #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.rb', line 142
def collection_names( = {}) View.new(self, ).collection_names() end
    #collections(options = {})  ⇒ Array<Mongo::Collection> 
  
The set of returned collections depends on the version of MongoDB server that fulfills the request.
Get all the non-system collections that belong to this database.
See https://mongodb.com/docs/manual/reference/command/listCollections/
for more information and usage.# File 'lib/mongo/database.rb', line 203
def collections( = {}) collection_names().map { |name| collection(name) } end
#command(operation, opts = {}) ⇒ Mongo::Operation::Result
Execute a command on the database.
# File 'lib/mongo/database.rb', line 229
def command(operation, opts = {}) opts = opts.dup execution_opts = opts.delete(:) || {} txn_read_pref = if opts[:session] && opts[:session].in_transaction? opts[:session].txn_read_preference else nil end txn_read_pref ||= opts[:read] || ServerSelector::PRIMARY Lint.validate_underscore_read_preference(txn_read_pref) selector = ServerSelector.get(txn_read_pref) client.with_session(opts) do |session| server = selector.select_server(cluster, nil, session) op = Operation::Command.new( :selector => operation, :db_name => name, :read => selector, :session => session ) op.execute(server, context: Operation::Context.new( client: client, session: session, operation_timeouts: operation_timeouts(opts) ), options: execution_opts) end end
    #drop(options = {})  ⇒ Result 
  
Drop the database and all its associated information.
# File 'lib/mongo/database.rb', line 322
def drop( = {}) operation = { :dropDatabase => 1 } client.with_session() do |session| write_concern = if [:write_concern] WriteConcern.get([:write_concern]) else self.write_concern end Operation::DropDatabase.new({ selector: operation, db_name: name, write_concern: write_concern, session: session }).execute( next_primary(nil, session), context: Operation::Context.new( client: client, session: session, operation_timeouts: operation_timeouts() ) ) end end
#fs(options = {}) ⇒ Grid::FSBucket
Get the Grid “filesystem” for this database.
    #inspect  ⇒ String 
  
Get a pretty printed string inspection for the database.
# File 'lib/mongo/database.rb', line 380
def inspect "#<Mongo::Database:0x#{object_id} name=#{name}>" 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 non-system collections in the database.
See https://mongodb.com/docs/manual/reference/command/listCollections/
for more information and usage.# File 'lib/mongo/database.rb', line 175
def list_collections( = {}) View.new(self, ).list_collections() end
    #operation_timeouts(opts)  ⇒ Hash 
  
  # File 'lib/mongo/database.rb', line 560
def operation_timeouts(opts) # TODO: We should re-evaluate if we need two timeouts separately. {}.tap do |result| if opts[:timeout_ms].nil? result[:inherited_timeout_ms] = timeout_ms else result[:operation_timeout_ms] = opts.delete(:timeout_ms) end end end
    #read_command(operation, opts = {})  ⇒ Hash 
  
  Execute a read command on the database, retrying the read if necessary.
# File 'lib/mongo/database.rb', line 277
def read_command(operation, opts = {}) txn_read_pref = if opts[:session] && opts[:session].in_transaction? opts[:session].txn_read_preference else nil end txn_read_pref ||= opts[:read] || ServerSelector::PRIMARY Lint.validate_underscore_read_preference(txn_read_pref) preference = ServerSelector.get(txn_read_pref) client.with_session(opts) do |session| context = Operation::Context.new( client: client, session: session, operation_timeouts: operation_timeouts(opts) ) read_with_retry(session, preference, context) do |server| Operation::Command.new( selector: operation.dup, db_name: name, read: preference, session: session, comment: opts[:comment], ).execute(server, context: context) end end end
    #timeout_ms  ⇒ Integer | nil 
  
  # File 'lib/mongo/database.rb', line 552
def timeout_ms [:timeout_ms] || client.timeout_ms end
    #users  ⇒ View::User 
  
Get the user view for this database.
    #watch(pipeline = [], options = {})  ⇒ ChangeStream 
  
A change stream only allows ‘majority’ read concern.
This helper method is preferable to running a raw aggregation with a $changeStream stage, for the purpose of supporting resumability.
As of version 3.6 of the MongoDB server, a “$changeStream“ pipeline stage is supported in the aggregation framework. As of version 4.0, this stage allows users to request that notifications are sent for all changes that occur in the client’s database.
# File 'lib/mongo/database.rb', line 519
def watch(pipeline = [], = {}) = .dup [:cursor_type] = :tailable_await if [:max_await_time_ms] Mongo::Collection::View::ChangeStream.new( Mongo::Collection::View.new(collection("#{COMMAND}.aggregate"), {}, ), pipeline, Mongo::Collection::View::ChangeStream::DATABASE, ) end