Clase: Mongoid::Contextual::Mongo

Hereda:
Objeto
  • Objeto
Mostrar todo
Ampliado por:
Reenviable
Incluye:
Enumerable, Association::EagerLoadable, Atomico, Aggregable::Mongo, Queryable, Pluckable
Definido en:
lib/mongoid/contextual/mongo.rb,
lib/mongoid/contextual/mongo/documents_loader.rb

Overview

Objeto de contexto utilizado para realizar consultas masivas y operaciones de persistencia en documentos que se almacenan en la base de datos y no se han cargado en la memoria de la aplicación.

Definido bajo Namespace

clase: DocumentsLoader

Resumen de constantes colapsar

OPCIONES =

Constante opciones.

%i[hint
limit
Omitir
sort
batch_size
max_scan
max_time_ms
snapshot
comment
Lea
cursor_type
intercalación].freeze

Constantes incluidas de Atomic

Atomic::UPDATES

Resumen de atributos de la instancia colapsar

Atributos incluidos de Queryable

#colección, #colección La colección para query., #criterios, #criterios Los criterios para el contexto., #klass, #klass El klass para los criterios.

Resumen del método de instancia colapsar

Métodos incluidos de Queryable

#blank?

Métodos incluidos desde Association::EagerLoadable

#crear_pipeline, #carga_rápida, #carga_rápida_con_búsqueda, #cargable_rápidamente?, #precarga, #precarga_para_búsqueda, #intercambiar_campos_locales_y_extranjeros?

Métodos incluidos de Atomic

#add_atomic_pull, #add_atomic_unset, #atomic_array_add_to_sets, #atomic_array_pulls, #atomic_array_pushes, #atomic_attribute_name, #atomic_delete_modifier, #atomic_insert_modifier, #atomic_path, #atomic_paths, #atomic_position, #atomic_pulls, #atomic_pushes, #atomic_sets, #atomic_unsets, #atomic_updates, #delayed_atomic_pulls, #delayed_atomic_sets, #delayed_atomic_unsets, #flag_as_destroyed, #flagged_destroys, #process_flagged_destroys

Métodos incluidos en Aggregable::Mongo

#agregados, #prom, #máx, #mín, #sum

Detalles del Constructor

#intaializar(criterios) ⇒ Mongo

Crea el nuevo contexto de Mongo. Esto delega las operaciones al controlador subyacente.

Ejemplos:

Cree el nuevo contexto.

Mongo.new(criteria)

Parámetros:



269
270
271
272
273
274
275
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 269

def inicializar(criterios)
  @criteria, @klass = criterios, criterios.klass
  @colección = @klass.Colección
  criterios.enviar(:merge_type_selection)
  @view = Colección.buscar(criterios.selector, sesión: _sesión)
  aplicar_opciones
end

Detalles de atributo de instancias

#documents_loaderObject (solo lectura)

Devuelve el valor del atributo documents_loader.



53
54
55
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 53

def documents_loader
  @documents_loader
end

#vistaHash (solo lectura)

Ejecuta una explicación sobre los criterios.

Ejemplos:

Explique los criterios.

Band.where(name: "Depeche Mode").explain

Parámetros:

  • opciones (encriptada)

    opciones personalizables (consulte Mongo::Collection::View::Explainable)

Devuelve:

  • (encriptada)

    El resultado de la explicación.



41
42
43
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 41

def vista
  @view
end

#ver La vista de la colección Mongo.(Lavista de lacolecciónMongo.) ⇒ Objeto (solo lectura)



41
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 41

attr_reader vista

Detalles del método de instancia

#count(options = {}, &block) ⇒ Integer

Obtén la cantidad de documentos que coinciden con la query.

Ejemplos:

Obtiene el número de documentos coincidentes.

context.count

Obtiene el recuento de documentos con las opciones proporcionadas.

context.count(limit: 1)

Obtenga el recuento de donde el bloque proporcionado sea verdadero.

context.count do |doc|
  doc.likes > 1
end

Parámetros:

  • opciones (encriptada) (por defecto: {})

    Las opciones, como saltar y limitar, deben tenerse en cuenta en el conteo.

Devuelve:

  • (Número entero)

    La cantidad de coincidencias.



72
73
74
75
76
77
78
79
80
81
82
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 72

def count(opciones = {}, &bloque)
  return super(&bloque) si ¿block_given?

  si valid_for_count_documents?
    vista.contar_documentos(opciones)
  else
    # TODO: Remueve esto cuando quitemos la API for_js obsoleta.
    # https://jira.mongodb.org/browse/MONGOID-5681
    vista.count(opciones)
  end
end

#borrarnulo También conocido como: delete_all

Elimine todos los documentos de la base de datos que coincidan con el selector.

Ejemplos:

Borrar todos los documentos.

context.delete

Devuelve:

  • (nil)

    Nil.



112
113
114
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 112

def borrar
  vista.borrar_varios.deleted_count
end

#destruirnil También conocido como: destroy_all

Destruye todos los documentos en la base de datos que coincidan con el selector.

Ejemplos:

Destruye todos los documentos.

context.destroy

Devuelve:

  • (nil)

    Nil.



123
124
125
126
127
128
129
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 123

def destruir
  cada.inyectar(0) hacer |count, doc|
    doc.destruir
    count += 1 si acknowledged_write?
    count
  end
end

# distinto(campo)arreglo<Object>

Obtenga los valores distintos en la base de datos para el campo proporcionado.

Ejemplos:

Obtén los valores distintos.

context.distinct(:name)

Parámetros:

  • Campo (String | Símbolo)

    El nombre del campo.

Devuelve:

  • (arreglo<Object>)

    Los valores distintos del campo.



140
141
142
143
144
145
146
147
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 140

def distinct(Campo)
  Nombre = klass.cleanse_localized_field_names(Campo)

  vista.distinct(Nombre).map hacer |Valor|
    es_traducción = "#{nombre}_traducciones" == Campo.to_s
    desmongoizar_recursivo(Nombre, Valor, es_traducción)
  end
end

#each(&block) ⇒ Enumerator

Iterar sobre el contexto. Si se proporciona un bloque, cede a un documento Mongoid por cada uno; de lo contrario, retorna un enum.

Ejemplos:

Iterar sobre el contexto.

context.each do |doc|
  puts doc.name
end

Devuelve:

  • (Enumerator)

    El enumerador.



158
159
160
161
162
163
164
165
166
167
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 158

def cada(&bloque)
  si ¿block_given?
    documentos_para_iteración.cada hacer |doc|
      yield_document(doc, &bloque)
    end
    sí mismo
  else
    to_enum
  end
end

#estimated_count(options = {}) ⇒ Integer

Obtén el número estimado de documentos que coinciden con la query.

A diferencia de count, estimated_count no toma un bloque porque no está tradicionalmente definido (con un bloque) en Enumerable como lo está count.

Ejemplos:

Obtén el número estimado de documentos coincidentes.

context.estimated_count

Parámetros:

  • opciones (encriptada) (por defecto: {})

    Las opciones, como maxTimeMS para tener en cuenta en el recuento.

Devuelve:

  • (Número entero)

    La cantidad de coincidencias.



96
97
98
99
100
101
102
103
104
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 96

def estimated_count(opciones = {})
  a menos que criterios.selector.¿vacío?
    propagar Mongoid::Errors::Alcance de conteo estimado no válido.Nuevo(klass) si klass.default_scoping?

    propagar Mongoid::Errors::InvalidEstimatedCountCriteria.Nuevo(klass)

  end
  vista.estimated_document_count(opciones)
end

#¿exists?(id_or_conditions = :none) ⇒ true | false

Nota:

No usamos count aquí porque Mongo no utiliza índices b-tree contados.

¿Existen documentos para el contexto?

Ejemplos:

¿Existen documentos para el contexto?

context.exists?

¿Existen documentos para la _id dada?

context.exists?(BSON::ObjectId(...))

¿Existen documentos para las condiciones dadas?

context.exists?(name: "...")

Parámetros:

  • id_or_conditions (Hash | Objeto | falso) (por defecto: :none)

    un _id para buscar, un hash de condiciones, nil o falso.

Devuelve:

  • (true | false)

    Si el recuento es más que cero. Siempre es falso si se pasa nil o false.



188
189
190
191
192
193
194
195
196
197
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 188

def ¿existe?(id_or_conditions = none)
  return false si vista.limit == 0

  caso id_or_conditions
  cuando none entonces !!vista.proyección(_id: 1).limit(1).primero
  cuando nulo, false entonces false
  cuando encriptada entonces mongo.Nuevo(criterios.dónde(id_or_conditions)).¿existe?
  else mongo.Nuevo(criterios.dónde(_id: id_or_conditions)).¿existe?
  end
end

#quintoDocumento | nulo

Obtén el quinto document de la base de datos para el selector de los criterios.

Ejemplos:

Obtén el quinto documento.

context.fifth

Devuelve:

  • (Document | nil)

    El quinto documento o nil si no se encuentra ninguno.



684
685
686
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 684

def quinto
  retrieve_nth(4)
end

#¡quinto!Documento

Obtén el quinto document en la base de datos para el selector del criterio o genera un error si no se encuentra ninguno.

Ejemplos:

Obtén el quinto documento.

context.fifth!

Devuelve:

Aumenta:



698
699
700
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 698

def ¡quinto!
  quinto || raise_document_not_found_error
end

#find_firstobjeto

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 primer resultado sin aplicar ordenación



255
256
257
258
259
260
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 255

def find_first
  return a menos que raw_doc = vista.primero

  doc = Fábrica.from_db(klass, raw_doc, criterios)
  eager_load([ doc ]).primero
end

#find_one_and_deleteDocumento

Ejecute el comando find and modify, utilizado para $findAndModify de MongoDB. Esto elimina el document encontrado.

Ejemplos:

Exécutez la commande.

context.find_one_and_delete

Devuelve:



246
247
248
249
250
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 246

def find_one_and_delete
  return a menos que doc = vista.find_one_and_delete

  Fábrica.from_db(klass, doc)
end

#find_one_and_replace(replacement, opciones = {}) ⇒ documento

Ejecute el comando de búsqueda y modificación, usado para $findAndModify de MongoDB.

Ejemplos:

Exécutez la commande.

context.find_one_and_update({ likes: 1 })

Parámetros:

  • reemplazo (encriptada)

    El reemplazo.

  • opciones (encriptada) (por defecto: {})

    Las opciones de comando.

Opciones Hash (options):

  • documento de retorno (:before | :after)

    Devuelve el documento actualizado de antes o después de actualizar.

  • inserción (true | false)

    Crea el document si no existe.

Devuelve:



233
234
235
236
237
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 233

def find_one_and_replace(reemplazo, opciones = {})
  return a menos que doc = vista.find_one_and_replace(reemplazo, opciones)

  Fábrica.from_db(klass, doc)
end

#find_one_and_update(update, options = {}) ⇒ Document

Ejecute el comando de búsqueda y modificación, usado para $findAndModify de MongoDB.

Ejemplos:

Exécutez la commande.

context.find_one_and_update({ "$inc" => { likes: 1 }})

Parámetros:

  • update (encriptada)

    Las actualizaciones.

  • opciones (encriptada) (por defecto: {})

    Las opciones de comando.

Opciones Hash (options):

  • documento de retorno (:before | :after)

    Devuelve el documento actualizado de antes o después de actualizar.

  • inserción (true | false)

    Crea el document si no existe.

Devuelve:



213
214
215
216
217
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 213

def find_one_and_update(update, opciones = {})
  return a menos que doc = vista.find_one_and_update(update, opciones)

  Fábrica.from_db(klass, doc)
end

#primero(límite = nil) ⇒ Documento | nil También conocido como: uno

Nota:

Agregar automáticamente una ordenación en _id cuando no se define ninguna otra ordenación en los criterios tiene el potencial de causar problemas de rendimiento graves. Si experimenta un bajo rendimiento inesperado al usar #first o #last y no tiene un orden definido en los criterios, use #take en su lugar. Tenga en cuenta que #tome no garantiza el orden.

Obtenga el primer documento en la base de datos para el selector del criterio.

Ejemplos:

Obtén el primer documento.

context.first

Parámetros:

  • limit (Integer) (valor por defecto: nil)

    El número de documentos a devolver.

Devuelve:

  • (Document | nil)

    El primer documento o nulo si no se encuentra ninguno.



535
536
537
538
539
540
541
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 535

def primero(limit = nulo)
  si limit.nil?
    retrieve_nth(0)
  else
    retrieve_nth_with_limit(0, limit)
  end
end

#first!Document

Nota:

Agregar automáticamente una ordenación en _id cuando no se define ninguna otra ordenación en los criterios tiene el potencial de causar problemas de rendimiento graves. Si experimenta un rendimiento bajo inesperado al utilizar #first! o #last! y no tienes ningún orden definido en los criterios, utiliza #take! en vez de eso. Ten en cuenta que #take! no garantiza el orden.

Obtenga el primer document en la base de datos para el selector del criterio o muestre un error si no se encuentra ninguno.

Ejemplos:

Obtén el primer documento.

context.first!

Devuelve:

Aumenta:



560
561
562
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 560

def ¡primero!
  primero || raise_document_not_found_error
end

#cuartoDocumento | nil

Obtén el cuarto document en la base de datos para el selector del criterio.

Ejemplos:

Obtén el cuarto documento.

context.fourth

Devuelve:

  • (Document | nil)

    El cuarto documento o nil si no se encuentra ninguno.



660
661
662
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 660

def cuarto
  retrieve_nth(3)
end

#¡cuarto!Documento

Obtén el cuarto document en la base de datos para el selector de criterios o devuelve un error si no se encuentra ninguno.

Ejemplos:

Obtén el cuarto documento.

context.fourth!

Devuelve:

Aumenta:



674
675
676
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 674

def ¡cuarto!
  cuarto || raise_document_not_found_error
end

#last(limit = nil) ⇒ Document | nil

Nota:

Agregar automáticamente una ordenación en _id cuando no se define ninguna otra ordenación en los criterios tiene el potencial de causar problemas de rendimiento graves. Si experimenta un bajo rendimiento inesperado al usar #first o #last y no tiene un orden definido en los criterios, use #take en su lugar. Tenga en cuenta que #tome no garantiza el orden.

Obtén el último document en la base de datos para el selector de criterios.

Ejemplos:

Obtener el último documento.

context.last

Parámetros:

  • limit (Integer) (valor por defecto: nil)

    El número de documentos a devolver.

Devuelve:

  • (Document | nil)

    El último documento o nil si no se encuentra ninguno.



578
579
580
581
582
583
584
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 578

def último(limit = nulo)
  si limit.nil?
    retrieve_nth_to_last(0)
  else
    retrieve_nth_to_last_with_limit(0, limit)
  end
end

#last!Document

Nota:

Agregar automáticamente una ordenación en _id cuando no se define ninguna otra ordenación en los criterios tiene el potencial de causar problemas de rendimiento graves. Si experimenta un rendimiento bajo inesperado al utilizar #first! o #last! y no tienes ningún orden definido en los criterios, utiliza #take! en vez de eso. Ten en cuenta que #take! no garantiza el orden.

Obtén el último document en la base de datos para el selector de los criterios o genera un error si no se encuentra ninguno.

Ejemplos:

Obtener el último documento.

context.last!

Devuelve:

Aumenta:



602
603
604
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 602

def ¡último!
  último || raise_document_not_found_error
end

#longitudInteger También conocido como: tamaño

Devuelve el número de documentos en la base de datos que coinciden con el selector de la query.

Ejemplos:

Obtén la longitud.

context.length

Devuelve:

  • (Número entero)

    El número de documentos.



286
287
288
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 286

def longitud
  count
end

#límite(valor) ⇒ Mongo

Limita la cantidad de documentos que se devuelven en la base de datos.

Ejemplos:

Limita los documentos.

context.limit(20)

Parámetros:

  • Valor (Número entero)

    El número de documentos a devolver.

Devuelve:

  • (mongo)

    El contexto.



299
300
301
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 299

def limit(Valor)
  @view = vista.limit(Valor) y  sí mismo
end

#load_asyncObject

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.

Programa un cronograma para cargar documentos para el contexto.

Dependiendo de la configuración de Mongoid, la tarea programada puede ejecutarse inmediatamente en el hilo del llamador, o puede programarse para una ejecución asíncrona.



761
762
763
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 761

def cargar_asincrónicamente
  @documents_loader ||= DocumentsLoader.Nuevo(vista, klass, criterios)
end

#map_reduce(map, reduce) ⇒ MapReduce

Inicia una operación de map/reduce desde el contexto.

Ejemplos:

Iniciar una operación map/reduce.

context.map_reduce(map, reduce)

Parámetros:

  • map (string)

    La función js de mapa.

  • disminuir (string)

    La función reduce js.

Devuelve:

  • (MapReduce)

    El contenedor perezoso de map/reduce.



312
313
314
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 312

def map_reduce(map, disminuir)
  mapReduce.Nuevo(Colección, criterios, map, disminuir)
end

#pick(*campos) ⇒ Object | Array<Object>

Elije los valores de un solo campo de la base de datos.

Ejemplos:

Elige un campo.

context.pick(:_id)

Parámetros:

  • *campo ([ String | Symbol ]...)

    Campo(s) para elegir.

Devuelve:

  • (objeto |<Object> arreglo)

    Los valores seleccionados.



349
350
351
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 349

def elegir(*Campos)
  limit(1).pluck(*Campos).primero
end

#pluck(*campos) ⇒ Array<Object> | Array<Array<Object>>

Selecciona el/los valor(es) del campo de la base de datos. Devuelve un resultado por cada documento encontrado en la base de datos para el contexto. Los resultados se normalizan según sus tipos de campo Mongoid. Tenga en cuenta que los resultados pueden incluir duplicados y valores nulos.

Ejemplos:

Seleccionar un campo.

context.pluck(:_id)

Parámetros:

  • *campo ([ String | Symbol ]...)

    Campo o campos a extraer, incluyendo campos anidados utilizando notación de puntos.

Devuelve:

  • (Array<Object> | Array<Array<Object>>)

    Los valores seleccionados. Si el argumento *fields contiene un solo valor, cada resultado en el arreglo será un solo valor. De lo contrario, cada resultado en el arreglo será un arreglo de valores.



332
333
334
335
336
337
338
339
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 332

def pluck(*Campos)
  # Varios campos pueden asignarse al mismo nombre de campo. Por ejemplo,
  # la obtención de un campo y su _campo de traducciones corresponden al mismo
  # campo en la base de datos. por esta razón, debemos preparar el
  # proyección específicamente.
  prep = prepare_pluck(Campos, prepare_projection: true)
  extraer de documentos(vista.proyección(prep[:proyección]), prep[Nombres de campos])
end

#segundoDocumento | nil

Consigue el segundo document en la base de datos para el selector de criterios.

Ejemplos:

Obtén el segundo documento.

context.second

Devuelve:

  • (Document | nil)

    El segundo documento o nil si no se encuentra ninguno.



612
613
614
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 612

def segundo
  retrieve_nth(1)
end

#segundo!Documento

Obtenga el segundo document de la base de datos para el selector de criterios o genere un error si no se encuentra ninguno.

Ejemplos:

Obtén el segundo documento.

context.second!

Devuelve:

Aumenta:



626
627
628
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 626

def ¡segundo!
  segundo || raise_document_not_found_error
end

#second_to_lastDocumento | nil

Obtener el penúltimo document de la base de datos para el selector de criterios.

Se encuentra.

Ejemplos:

Obten el penúltimo documento.

context.second_to_last

Devuelve:

  • (Document | nil)

    El penúltimo documento o nulo si ninguno



710
711
712
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 710

def penúltimo
  retrieve_nth_to_last(1)
end

#segundo_a_ultimo!Documento

Obtén el penúltimo document de la base de datos según el selector del criterio o genera un error si no se encuentra ninguno.

Ejemplos:

Obten el penúltimo documento.

context.second_to_last!

Devuelve:

Aumenta:



724
725
726
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 724

def second_to_last!
  penúltimo || raise_document_not_found_error
end

#skip(value) ⇒ Mongo

Omite el número proporcionado de documentos.

Ejemplos:

Saltar los documentos.

context.skip(20)

Parámetros:

  • Valor (Número entero)

    El número de documentos que se deben omitir.

Devuelve:

  • (mongo)

    El contexto.



465
466
467
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 465

def Omitir(Valor)
  @view = vista.Omitir(Valor) y  sí mismo
end

#sort(values = nil, &block) ⇒ Mongo

Ordena los documentos según la especificación proporcionada.

Ejemplos:

Ordena los documentos.

context.sort(name: -1, title: 1)

Parámetros:

  • values (encriptada) (valor por defecto: nil)

    El ordenamiento de los valores como pares campo/dirección(1/-1).

Devuelve:

  • (mongo)

    El contexto.



478
479
480
481
482
483
484
485
486
487
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 478

def sort(values = nulo, &bloque)
  si ¿block_given?
    super(&bloque)
  else
    # actualiza los criterios
    @criteria = criterios.ordenar_por(values)
    aplicar_opción(:sort)
    sí mismo
  end
end

#take(limit = nil) ⇒ Document | Array<Document>

Tome el número de documentos dado de la base de datos.

Ejemplos:

Toma 10 documentos

context.take(10)

Parámetros:

  • limit (Integer | nil) (valor por defecto: nil)

    El número de documentos a devolver, o bien nil.

Devuelve:

  • (Document | Array<Document>)

    La lista de documentos, o un documento si no se proporcionó ningún valor.



362
363
364
365
366
367
368
369
370
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 362

def tomar(limit = nulo)
  si limit
    limit(limit).to_a
  else
    # Haz to_a primero para que el método Mongo#first no se utilice y
    # el resultado no está ordenado.
    limit(1).to_a.primero
  end
end

#take!Document

Tome un documento de la base de datos y genere un error si no hay ninguno.

Ejemplos:

Toma un documento

context.take!

Devuelve:

Aumenta:



381
382
383
384
385
386
387
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 381

def ¡toma!
  # Haz to_a primero para que el método Mongo#first no se utilice y
  # el resultado no está ordenado.
  propagar Errors::DocumentoNoEncontrado.Nuevo(klass, nulo, nulo) a menos que fst = limit(1).to_a.primero

  fst
end

#tally(campo) ⇒ Hash

Obtén un resumen de recuentos para los valores de un solo campo. Por ejemplo, si los siguientes documentos estuvieran en la base de datos:

{ _id: 1, age: 21 }
{ _id: 2, age: 21 }
{ _id: 3, age: 22 }

Model.tally("age")

produciría el siguiente resultado:

{ 21 => 2, 22 => 1 }

Al contar un campo dentro de una asociación de arreglo o embeds_many:

{ _id: 1, array: [ { x: 1 }, { x: 2 } ] }
{ _id: 2, array: [ { x: 1 }, { x: 2 } ] }
{ _id: 3, array: [ { x: 1 }, { x: 3 } ] }

Model.tally("array.x")

Las claves del hash resultante son arreglos:

{ [ 1, 2 ] => 2, [ 1, 3 ] => 1 }

Nota que si se suma un elemento en un arreglo de hashes y la clave no existe en algunos de los hashes, tally no incluirá esas claves nil en el hash resultante:

{ _id: 1, array: [ { x: 1 }, { x: 2 }, { y: 3 } ] }

Model.tally("array.x")
# => { [ 1, 2 ] => 1 }

Parámetros:

  • Campo (String | Símbolo)

    El nombre del campo.

Devuelve:

  • (encriptada)

    El hash de recuentos.



426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 426

def cómputo(Campo)
  Nombre = klass.cleanse_localized_field_names(Campo)

  fld = klass.recorrer_árbol_de_asociaciones(Nombre)
  pipeline = [ { '$grupo' => { _id: "$#{name}", cuentas: { '$sum': 1 } } } ]
  pipeline.unshift('$match' => vista.filtro) a menos que view.filtro.blank?

  colección.agregar(pipeline).each_with_object({}) do |doc, tallies|
    es_traducción = "#{nombre}_traducciones" == campo.to_s
    val = doc['_id']

    key = if val.is_a?(Array)
            val.map do |v|
              demongoize_with_field(fld, v, is_translation)
            end
          else
            demongoize_with_field(fld, val, is_translation)
          end

    # La única vez en que una clave ya existirá en el hash de recuentos
    # es cuando los valores se almacenan de manera diferente en la base de datos, pero
    # se desmongoizan al mismo valor. Un buen ejemplo de cuándo sucede esto
    # es al usar campos localizados. Si bien la consulta del servidor no agrupará
    # juntos los hashes que tengan otros valores en diferentes idiomas, el
    # valor desmongoizado es sólo la traducción en la localidad actual,
    # que puede ser la misma en varios de esos hashes desiguales.
    contadores[clave] ||= 0
    contadores[clave] += doc['conteos']
  end
end

#terceroDocumento | nil

Obtén el tercer document en la base de datos para el selector del criterio.

Ejemplos:

Obtén el tercer documento.

context.third

Devuelve:

  • (Document | nil)

    El tercer documento o nulo si no se encuentra ninguno.



636
637
638
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 636

def tercero
  retrieve_nth(2)
end

#¡tercero!Documento

Obtener el tercer document en la base de datos para el selector del criterio o generar un error si no se encuentra ninguno.

Ejemplos:

Obtén el tercer documento.

context.third!

Devuelve:

Aumenta:



650
651
652
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 650

def ¡tercero!
  tercero || raise_document_not_found_error
end

#tercero_anteúltimoDocumento | nil

Obtén el tercer document antes del último en la base de datos según el selector del criterio.

Se encuentra.

Ejemplos:

Obtenga el tercer documento desde el final.

context.third_to_last

Devuelve:

  • (Document | nil)

    El tercer último documento o nulo si no hay ninguno



736
737
738
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 736

def antepenúltimo
  retrieve_nth_to_last(2)
end

#¡antepenúltimo!documento

Get el tercer document desde el final en la base de datos que cumpla con el selector de los criterios o genere un error si no se encuentra ninguno.

Ejemplos:

Obtenga el tercer documento desde el final.

context.third_to_last!

Devuelve:

  • (documento)

    El tercer documento antes del último.

Aumenta:



750
751
752
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 750

def tercero por la cola!
  antepenúltimo || raise_document_not_found_error
end

#update(attributes = nil, opts = {}) ⇒ nil | false

Actualiza el primer documento coincidente de forma atómica.

Ejemplos:

Actualiza el primer documento coincidente.

context.update({ "$set" => { name: "Smiths" }})

Parámetros:

  • atributos (encriptada) (valor por defecto: nil)

    Los nuevos atributos para el documento.

  • opciones (encriptada) (por defecto: {})

    Las opciones para actualizar la operación.

Opciones Hash (opts):

  • :array_filters (arreglo)

    Un conjunto de filtros que especifica a qué elementos de un arreglo se debe aplicar una actualización.

Devuelve:

  • (nil | false)

    Falso si no se proporcionaron atributos.



501
502
503
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 501

def update(atributos = nulo, opciones = {})
  update_documents(atributos, :update_one, opciones)
end

#update_all(attributes = nil, opts = {}) ⇒ nil | false

Actualiza todos los documentos coincidentes de manera atómica.

Ejemplos:

Actualiza todos los documentos coincidentes.

context.update_all({ "$set" => { name: "Smiths" }})

Parámetros:

  • atributos (encriptada) (valor por defecto: nil)

    Los nuevos atributos de cada documento.

  • opciones (encriptada) (por defecto: {})

    Las opciones para actualizar la operación.

Opciones Hash (opts):

  • :array_filters (arreglo)

    Un conjunto de filtros que especifica a qué elementos de un arreglo se debe aplicar una actualización.

Devuelve:

  • (nil | false)

    Falso si no se proporcionaron atributos.



517
518
519
# Archivo 'lib/mongoid/contextual/mongo.rb', línea 517

def update_all(atributos = nulo, opciones = {})
  update_documents(atributos, :update_many, opciones)
end