Clase: Mongo::base de datos
- Hereda:
-
Objeto
- Objeto
- Mongo::base de datos
- Ampliado por:
- Reenviable
- Incluye:
- Reintentar
- Definido en:
- lib/mongo/database.rb,
lib/mongo/database/view.rb,
lib/mongo/database/cursor_command_view.rb
Overview
Representa una base de datos en el servidor db y las operaciones que se pueden ejecutar en ella a este nivel.
Definido bajo Namespace
clase: CursorCommandView, View
Resumen de constantes colapsar
- ADMIN =
El nombre de la base de datos admin.
'admin'- COMANDO =
La "colección" sobre la que operan los comandos de la base de datos.
'$cmd'- DEFAULT_OPTIONS =
Las opciones de base de datos por defecto.
opciones::Redactado.Nuevo(database: ADMIN).freeze
- NAME =
Obsoleto.
Constante de campo de nombre de base de datos.
'Nombre'- base de datos =
Constante de bases de datos.
'databases'- namespace =
El nombre de la colección que contiene todos los nombres de las colecciones.
'system.namespaces'
Resumen de atributos de la instancia colapsar
-
#client ⇒ Client
Solo lectura
Cliente El cliente de la base de datos.
-
#nombre ⇒ String
Solo lectura
Nombre El nombre de la base de datos.
-
#options ⇒ Hash
Solo lectura
Opciones Las opciones.
Resumen del método de instancia colapsar
-
#==(otro) ⇒ true, false
Verificar la igualdad del objeto de base de datos con otro.
-
#[](collection_name, options = {}) ⇒ Mongo::Collection (también: #colección)
Obtenga una colección en esta base de datos por el nombre proporcionado.
-
#aggregate(pipeline, options = {}) ⇒ colección::View::agregación
Realiza una agregación en la base de datos.
-
#cluster ⇒ Mongo::Server
Obtén el servidor principal del clúster.
-
#collection_names(options = {}) ⇒ arreglo<String>
Obtener todos los nombres de las colecciones no del sistema en la base de datos.
-
#collections(options = {}) ⇒ Array<Mongo::Collection>
Obtén todas las colecciones no del sistema que pertenecen a esta base de datos.
-
#command(operación, opts = {}) ⇒ Mongo::Operation::Result
Ejecutar un comando en la base de datos.
-
#cursor_command(command, options = {}) ⇒ Mongo::Cursor
Ejecute un comando que devuelva un cursor y analice la respuesta como un cursor.
-
#descartar(opciones = {}) ⇒ Resultado
Descartar la base de datos y toda la información asociada a ella.
-
#fs(options = {}) ⇒ Grid::FSBucket
Obtén el "sistema de archivos" Grid para esta base de datos.
-
#initialize(cliente, nombre, opciones = {}) ⇒ Base de datos
constructor
Instancie un nuevo objeto de base de datos.
-
#inspect ⇒ string
Obtener una inspección de string impresa bonita para la base de datos.
-
#list_collections(options = {}) ⇒ Array<Hash>
Obtenga información sobre todas las colecciones que no son del sistema en la base de datos.
-
#operation_timeouts(opts) ⇒ Hash
privado
Valor timeout_ms configurado a nivel de operación (si lo hay), y/o timeout_ms configurado a nivel de colección/base de datos/cliente (si lo hay).
-
#read_command(operación, opciones = { {}) ⇒ Hash
privado
Ejecute un comando de lectura en la base de datos, retrying la lectura si es necesario.
-
#timeout_ms ⇒ Integer | nil
privado
Tiempo de espera de la operación que es para esta base de datos o para el cliente correspondiente.
-
#usuarios ⇒ Ver::Usuario
Obtener la vista de usuario para esta base de datos.
-
#ver(pipeline = [], options = {}) ⇒ ChangeStream
Permite a los usuarios solicitar que se envíen notificaciones por todos los cambios que ocurran en la base de datos del cliente.
Métodos incluidos de Retryable
#read_worker, #select_server, #with_overload_retry, #write_worker
Detalles del Constructor
#initialize(client, name, options = {}) ⇒ Base de datos
Instancie un nuevo objeto de base de datos.
479 480 481 482 483 484 485 486 487 488 |
# Archivo 'lib/mongo/base de datos.rb', línea 479 def inicializar(Cliente, Nombre, = {}) propagar Error::InvalidDatabaseName.Nuevo a menos que Nombre si Lint.¿habilitado? && !(Nombre.is_a?(String) || Nombre.is_a?(Símbolo)) propagar "El nombre de la base de datos debe ser un string o un símbolo: #{name}" end @client = Cliente @name = Nombre.to_s.freeze @options = .freeze end |
Detalles de atributo de instancias
#cliente ⇒ Cliente (solo lectura)
Devuelve el cliente El cliente de la base de datos.
61 62 63 |
# Archivo 'lib/mongo/base de datos.rb', línea 61 def Cliente @client end |
#nombre ⇒ string (solo lectura)
Devuelve el nombre El nombre de la base de datos.
64 65 66 |
# Archivo 'lib/mongo/base de datos.rb', línea 64 def Nombre @name end |
#opciones ⇒ Hash (solo lectura)
Devuelve opciones Las opciones.
67 68 69 |
# Archivo 'lib/mongo/base de datos.rb', línea 67 def @options end |
Detalles del método de instancia
#==(otro) ⇒ true, false
Verifique la igualdad del objeto de base de datos con otro. Simplemente comprobará si los nombres son iguales.
94 95 96 97 98 |
# Archivo 'lib/mongo/base de datos.rb', línea 94 def ==(Otros) return false a menos que Otros.is_a?(Database) Nombre == Otros.Nombre end |
#[](collection_name, opciones = {}) ⇒ Mongo::Collection También se conoce como: colección
Obtenga una colección en esta base de datos por el nombre proporcionado.
111 112 113 114 115 116 117 118 |
# Archivo 'lib/mongo/base de datos.rb', línea 111 def [](nombre_colección, = {}) si [API del servidor] propagar ArgumentError, 'La opción :server_api no puede ser especificada para los objetos colección. Solo puede ser especificada a nivel de Cliente' end Colección.Nuevo(sí mismo, nombre_colección, ) end |
#aggregate(pipeline, options = {}) ⇒ Collection::View::Aggregation
Realiza una agregación en la base de datos.
568 569 570 |
# Archivo 'lib/mongo/base de datos.rb', línea 568 def Agregar(pipeline, = {}) vista.Nuevo(sí mismo, ).Agregar(pipeline, ) end |
#cluster ⇒ Mongo::Server
Devuelve Obten el servidor primario del clúster.
80 81 |
# Archivo 'lib/mongo/base de datos.rb', línea 80 def_delegators clúster, Siguiente |
#collection_names(opciones = {}) ⇒ arreglo<String>
El conjunto de nombres de colecciones devueltos depende de la versión del servidor MongoDB que cumpla con la solicitud.
Obtener todos los nombres de las colecciones no del sistema en la base de datos.
See https://mongodb.com/es/docs/manual/reference/command/listCollections/
for more information and usage.
145 146 147 |
# Archivo 'lib/mongo/base de datos.rb', línea 145 def collection_names( = {}) vista.Nuevo(sí mismo, ).collection_names() end |
#colecciones(opciones = {}) ⇒ Arreglo<Mongo::Colección>
El conjunto de colecciones devueltas depende de la versión del servidor MongoDB que satisface la solicitud.
Obtén todas las colecciones no del sistema que pertenecen a esta base de datos.
See https://mongodb.com/es/docs/manual/reference/command/listCollections/
for more information and usage.
206 207 208 |
# Archivo 'lib/mongo/base de datos.rb', línea 206 def collections( = {}) collection_names().map { |Nombre| Colección(Nombre) } end |
#command(operación, opts = {}) ⇒ Mongo::Operation::Result
Ejecutar un comando en la base de datos.
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 |
# Archivo 'lib/mongo/base de datos.rb', línea 232 def Comando(Operación, opciones = {}) opciones = opciones.dup execution_opts = opciones.borrar(execution_options) || {} txn_read_pref = (opciones[:: sesión].preferencia_de_lectura_txn si opciones[:: sesión] && opciones[:: sesión].en_transacción?) txn_read_pref ||= opciones[:leer] || ServerSelector::Primario Lint.validate_underscore_read_preference(txn_read_pref) selector = ServerSelector.Obtener(txn_read_pref) Cliente.con_sesión(opciones) hacer |sesión| context = Operación::Context.Nuevo( cliente: Cliente, sesión: sesión, operation_timeouts: operation_timeouts(opciones) ) op = Operación::Comando.Nuevo( selector: Operación, db_name: Nombre, leer: selector, sesión: sesión ) retry_enabled = Cliente.[:retry_reads] != false && Cliente.[retry_writes] != false con_reintento_por_sobrecarga(context: context, retry_enabled: retry_enabled) hacer Server = selector.select_server(clúster, nulo, sesión) op.ejecutar(Server, context: context, opciones: execution_opts) end end end |
#cursor_command(command, options = {}) ⇒ Mongo::Cursor
Ejecute un comando que devuelva un cursor y analice la respuesta como un cursor.
El comando se envía al servidor sin modificar; el driver NO DEBE inspeccionarlo ni alterarlo. Si la respuesta no contiene un campo de cursor, se genera un error. El comando nunca se reintenta.
Nota: si ya se ha establecido un campo maxTimeMS en el documento de comando, se deja tal cual. La opción max_time_ms a continuación solo se aplica a los comandos getMore. No se admite la configuración de timeout_ms y max_time_ms y tiene un comportamiento indefinido.
301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 |
# Archivo 'lib/mongo/base de datos.rb', línea 301 def cursor_command(Comando, = {}) = .dup execution_opts = .borrar(execution_options) || {} = () txn_read_pref = ([:: sesión].preferencia_de_lectura_txn si [:: sesión] && [:: sesión].en_transacción?) txn_read_pref ||= [:leer] || ServerSelector::Primario Lint.validate_underscore_read_preference(txn_read_pref) selector = ServerSelector.Obtener(txn_read_pref) # La sesión no está intencionalmente envuelta en #with_session: un implícito # la sesión debe sobrevivir a este método y el cursor la finaliza cuando está # agotado o cerrado. Hasta que el cursor tome posesión, la sesión y # cualquier conexión con equilibrio de carga se limpia aquí en cada ruta de salida. sesión = Cliente.get_session() context = Operación::Context.Nuevo( cliente: Cliente, sesión: sesión, operation_timeouts: operation_timeouts() ) op = Operación::CursorCommand.Nuevo( selector: Comando, db_name: Nombre, leer: selector, sesión: sesión ) # Según la especificación de contrapresión del cliente, reintentar un comando genérico en # los errores de sobrecarga requieren que tanto las lecturas como los guardados reintentables sean # habilitado, igual que el comando de base de datos. retry_enabled = Cliente.[:retry_reads] != false && Cliente.[retry_writes] != false Server = nulo Conexión = nulo cursor = nulo begin Resultado = con_reintento_por_sobrecarga(context: context, retry_enabled: retry_enabled) hacer Server = selector.select_server(clúster, nulo, sesión) si Server.load_balancer? # El cursor comprueba la conexión cuando se agota. Conexión = check_out_cursor_command_connection(Server, context) begin op.execute_with_connection(Conexión, context: context, opciones: execution_opts) rescate StandardError # Libere la conexión antes de que el error se propague para que # un intento reintentado comprueba uno nuevo. Conexión.connection_pool.registrar(Conexión) a menos que Conexión.¿fijado? Conexión = nulo propagar end else op.ejecutar(Server, context: context, opciones: execution_opts) end end a menos que Resultado.cursor? propagar Error::InvalidCursorOperation, 'La respuesta del comando no incluyó un cursor. ' \ 'Utilice el comando de base de datos para los comandos que no devuelven un cursor.' end view = CursorCommandView.new(self, ) cursor = Cursor.new(view, result, servidor, session: session, context: context) ensure # Si se creó el cursor, es propietario de la sesión y la conexión; # de lo contrario (error o ningún cursor en la respuesta) libérelos aquí. unless cursor connection.connection_pool.check_in(connection) if connection && !connection.pinned? session.end_session if session && session.implicit? end end cursor end |
#descartar(opciones = {}) ⇒ Result
Descartar la base de datos y toda la información asociada a ella.
439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 |
# Archivo 'lib/mongo/base de datos.rb', línea 439 def descartar( = {}) Operación = { dropDatabase: 1 } Cliente.con_sesión() hacer |sesión| write_concern = si [conformidad_de_lectura] Nivel de confirmación de escritura (write concern).Obtener([conformidad_de_lectura]) else sí mismo.write_concern end Operación::DropDatabase.Nuevo({ selector: Operación, db_name: Nombre, write_concern: write_concern, sesión: sesión }).ejecutar( siguiente_principal(nulo, sesión), context: Operación::Context.Nuevo( cliente: Cliente, sesión: sesión, operation_timeouts: operation_timeouts() ) ) end end |
#fs(options = {}) ⇒ Grid::FSBucket
Obtén el "sistema de archivos" Grid para esta base de datos.
522 523 524 |
# Archivo 'lib/mongo/base de datos.rb', línea 522 def fs( = {}) Cuadrícula::FSBucket.Nuevo(sí mismo, ) end |
#inspect ⇒ String
Obtener una inspección de string impresa bonita para la base de datos.
498 499 500 |
# Archivo 'lib/mongo/base de datos.rb', línea 498 def inspeccionar "#<Mongo::Database:0x#{object_id} name=#{name}>" end |
#list_collections(options = {}) ⇒ Arreglo<Hash>
El conjunto de colecciones devueltas y el esquema del hash de información por colección dependen de la versión del servidor de MongoDB que atienda la solicitud.
Obtenga información sobre todas las colecciones que no son del sistema en la base de datos.
See https://mongodb.com/es/docs/manual/reference/command/listCollections/
for more information and usage.
178 179 180 |
# Archivo 'lib/mongo/base de datos.rb', línea 178 def list_collections( = {}) vista.Nuevo(sí mismo, ).list_collections() end |
#operation_timeouts(opts) ⇒ Hash
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve el valor de timeout_ms establecido a nivel de la operación (si lo hay), y/o timeout_ms que se establece a nivel de colección/base de datos/cliente (si lo hay).
659 660 661 662 663 664 665 666 667 668 |
# Archivo 'lib/mongo/base de datos.rb', línea 659 def operation_timeouts(opciones) # TODO: Deberíamos volver a evaluar si necesitamos dos tiempos de espera por separado. {}.tocar hacer |Resultado| si opciones[:timeout_ms].nil? Resultado[timeout_inherente_ms] = timeout_ms else Resultado[:operation_timeout_ms] = opciones.borrar(:timeout_ms) end end end |
#read_command(operación, opts = {}) ⇒ Hash
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Ejecute un comando de lectura en la base de datos, retrying la lectura si es necesario.
394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 |
# Archivo 'lib/mongo/base de datos.rb', línea 394 def read_command(Operación, opciones = {}) txn_read_pref = (opciones[:: sesión].preferencia_de_lectura_txn si opciones[:: sesión] && opciones[:: sesión].en_transacción?) txn_read_pref ||= opciones[:leer] || ServerSelector::Primario Lint.validate_underscore_read_preference(txn_read_pref) preferencia = ServerSelector.Obtener(txn_read_pref) Cliente.con_sesión(opciones) hacer |sesión| context = Operación::Context.Nuevo( cliente: Cliente, sesión: sesión, operation_timeouts: operation_timeouts(opciones) ) Operación = Operación::Comando.Nuevo( selector: Operación.dup, db_name: Nombre, leer: preferencia, sesión: sesión, comment: opciones[:comment] ) op_name = opciones[:op_name] || 'Comando' trazador.trace_operation(Operación, context, op_name: op_name) hacer read_with_retry(sesión, preferencia, context) hacer |Server| Operación.ejecutar(Server, context: context) end end end end |
#timeout_ms ⇒ Integer | nil
Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.
Devuelve Operation timeout que es para esta base de datos o para el cliente correspondiente.
651 652 653 |
# Archivo 'lib/mongo/base de datos.rb', línea 651 def timeout_ms [:timeout_ms] || Cliente.timeout_ms end |
#usuarios ⇒ Vista::Usuario
Obtener la vista de usuario para esta base de datos.
534 535 536 |
# Archivo 'lib/mongo/base de datos.rb', línea 534 def Usuarios Autenticación::Usuario::vista.Nuevo(sí mismo) end |
#observar(pipeline = [], options = {}) ⇒ ChangeStream
Un flujo de cambios solo permite un nivel de consistencia de lectura "mayoría".
Este método asistente es preferible a ejecutar una agregación sin procesar con una etapa de $changeStream, con el fin de soportar la capacidad de reanudación.
Permite a los usuarios solicitar que se envíen notificaciones por todos los cambios que ocurran en la base de datos del cliente.
635 636 637 638 639 640 641 642 643 644 645 |
# Archivo 'lib/mongo/base de datos.rb', línea 635 def reloj(pipeline = [], = {}) = .dup [tipo_de_cursor] = tailable_await si [; tiempo_máximo_espera_ms] mongo::Colección::vista::ChangeStream.Nuevo( mongo::Colección::vista.Nuevo(Colección("#{COMMAND}.aggregate"), {}, ), pipeline, mongo::Colección::vista::ChangeStream::DATABASE, ) end |