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 =
The admin database name.
'admin'.freeze
-
COMMAND =
The “collection” that database commands operate against.
'$cmd'.freeze
-
DATABASES =
Databases constant.
'databases'.freeze
-
DEFAULT_OPTIONS =
The default database options.
Options::Redacted.new(:database => ADMIN).freeze
-
NAME =
Deprecated.
Database
name field constant.'name'.freeze
-
NAMESPACES =
The 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