Classe: Mongoide::Contextual::Mongo

Herda:
Objeto
  • Objeto
mostrar tudo
Estendido por:
Encaminhável
Inclui:
Enumerável, Associação::EagerLoadable, Atomic, Aggregable::Mongo, Queryable
Definido em:
lib/mongoid/contextual/mongo.rb,
lib/mongoid/contextual/mongo/documents_loader.rb

Visão geral

objeto de contexto usado para executar operações de query e persistência em massa em documentos que persistem no banco de banco de dados e não foram carregados na memória do aplicação .

Definido sob namespace

Classes: DocumentsLoader

Colapsode resumo constante

OPÇÕES =

Constante de opções.

[ :hint,
  :limit,
  :skip,
  :sort,
  :batch_size,
  :max_scan,
  :max_time_ms,
  :snapshot,
  :comentário,
  :read,
  :cursor_type,
  :collation
].congelar

Constantes incluídas do Atomic

Atomic::UPDATES

Recolhimento do Resumo do atributo de instância

Atributos incluídos no Queryable

#collection, #collection A collection na qual fazer query., #criteria, #criteria Os critérios para o contexto., #klass, #klass O klass para os critérios.

Recolhimento do Resumo do método de instância

Métodos incluídos do Queryable

#blank?

Métodos incluídos de Associação::EagerLoadable

#eager_load, #eager_loadable?, #preload

Métodos incluídos do 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, #marca_as_destroyed, #primaged_destroys, #process_lagaged_destroys

Métodos incluídos do Aggregable::Mongo

#aggregates, #avg, #max, #min, #sum

Detalhes do construtor

#initialize(critérios) ➤ mongo

Crie o novo contexto do mongo . Isso delega operações ao driver subjacente.

Exemplos:

Crie o novo contexto.

Mongo.new(criteria)

Parâmetros:



270
271
272
273
274
275
276
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 270

def inicializar(critério)
  @criteria, @klass = critério, critério.classe
  @collection = @klass.collection
  critério.enviar(:merge_type_selection)
  @view = collection.find(critério.seletor, sessão: _session)
  apply_options
end

Detalhes do atributo da instância

#documents_loaderObject (somente leitura)

Retorna o valor do atributo documents_loader.



54
55
56
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 54

def documents_loader
  @documents_loader
end

#viewHash (somente leitura)

Execute uma explicação sobre os critérios.

Exemplos:

Explique os critérios.

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

Parâmetros:

  • opções (Hash)

    opções personalizáveis (consulte Mongo::Collection::View::Explainable)

Retorna:

  • (Hash)

    O resultado de explicação.



42
43
44
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 42

def vista
  @view
end

#view A visualização da collection mongo .(TheMongocollectionview.) ➤ Objeto (somente leitura)



42
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 42

attr_reader :view

Detalhes do método de instância

#count(options = {}, &block) ➤ Inteiro

Obtenha o número de documentos correspondentes à query.

Exemplos:

Obtenha o número de documentos correspondentes.

context.count

Obtenha a contagem de documentos com as opções fornecidas.

context.count(limit: 1)

Obtenha a contagem de onde o bloqueio fornecido é verdadeiro.

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

Parâmetros:

  • opções (Hash) (padrão para: {})

    As opções, como pular e limitar, serão consideradas na contagem.

Retorna:

  • (Inteiro)

    O número de correspondências.



73
74
75
76
77
78
79
80
81
82
83
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 73

def contar(opções = {}, &noum: bloco ; verb: bloquear)
  Método super(&noum: bloco ; verb: bloquear) se block_given?

  se valid_for_count_documents?
    vista.count_documents(opções)
  mais
    # TODO: Remova isto quando removermos a API for_js obsoleta.
    # https://jira.mongodb.org/browse/MONGOID-5681
    vista.contar(opções)
  end
end

#deletenil Também conhecido como: delete_all

Exclua todos os documentos no banco de dados que correspondam ao seletor.

Exemplos:

Exclua todos os documentos.

context.delete

Retorna:

  • (nil)

    Nil.



114
115
116
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 114

def excluir
  vista.delete_many.delete_count
end

#Destruirnil Também conhecido como: Destruir_all

Destrua todos os documentos no banco de banco de dados que correspondam ao seletor.

Exemplos:

Destruir todos os documentos.

context.destroy

Retorna:

  • (nil)

    Nil.



125
126
127
128
129
130
131
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 125

def destruir
  cada.injetar(0) fazer |contar, doc|
    doc.destruir
    contar += 1 se acknowledgement_write?
    contar
  end
end

#distinct(campo) ➤ Array<Object>

Obtenha os valores distintos no banco de dados para o campo fornecido .

Exemplos:

Obtenha os valores distintos.

context.distinct(:name)

Parâmetros:

  • Campo (string | Símbolo)

    O nome do campo.

Retorna:

  • (Array<Object>)

    Os valores distintos para o campo .



142
143
144
145
146
147
148
149
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 142

def distinto(Campo)
  name = classe.Clean_localized_field_names(Campo)

  vista.distinto(name).map fazer |valor|
    is_translation = "#{name}_translations" == Campo.to_s
    recursive_demongoize(name, valor, is_translation)
  end
end

#cada(&bloco) ➤ Enumerador

Iterar sobre o contexto. Se for fornecido um bloco, produza um documento Mongoid para cada um, caso contrário, retorne um enumeração.

Exemplos:

Iterar sobre o contexto.

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

Retorna:

  • (Enumerador)

    O enumerador.



160
161
162
163
164
165
166
167
168
169
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 160

def cada(&noum: bloco ; verb: bloquear)
  se block_given?
    documents_for_iteration.cada fazer |doc|
      rendimento_documento(doc, &noum: bloco ; verb: bloquear)
    end
    auto
  mais
    to_enum
  end
end

#estimated_count(options = {}) ➤ Inteiro

Obtenha o número estimado de documentos correspondentes à query.

Ao contrário da contagem, estimated_count não usa um bloco porque não é Tradicionalmente definido (com um bloco) em Enumarable como a contagem.

Exemplos:

Obtenha o número estimado de documentos correspondentes.

context.estimated_count

Parâmetros:

  • opções (Hash) (padrão para: {})

    As opções, como maxTimeMS, devem ser consideradas na contagem.

Retorna:

  • (Inteiro)

    O número de correspondências.



97
98
99
100
101
102
103
104
105
106
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 97

def estimated_count(opções = {})
  a menos que auto.critério.seletor.vazio?
    se classe.default_scoping?
      aumentar Mongoid::Errors::InvalidEstimatedCountScoping.Novo(auto.classe)
    mais
      aumentar Mongoid::Errors::InvalidEstimatedCountCriteria.Novo(auto.classe)
    end
  end
  vista.estimated_document_count(opções)
end

#existe?(id_or_ conditions = :none) ➤ true | false

Observação:

Não usamos contagem aqui, pois o mongo não usa índices de árvore b contados.

Existem documentos para o contexto.

Exemplos:

Existem documentos para o contexto.

context.exists?

Existe algum documento para determinado _id.

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

Existem documentos para determinadas condições.

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

Parâmetros:

  • id_or_ conditions (Hash | Objeto | falso) (padrão para: :none)

    um _id para pesquisar, um hash de condições, nil ou false.

Retorna:

  • (verdadeiro | falso)

    Se a contagem for superior a zero. Sempre falso se passado como nulo ou falso.



190
191
192
193
194
195
196
197
198
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 190

def existe?(id_or_ conditions = : none)
  Método false se auto.vista.limit == 0
  caso id_or_ conditions
  quando : none então !!(vista.projeção(_id: 1).limit(1).primeiro)
  quando nada, false então false
  quando Hash então mongo.Novo(critério.ONDE(id_or_ conditions)).existe?
  mais mongo.Novo(critério.ONDE(_id: id_or_ conditions)).existe?
  end
end

#quintoDocumento | nada

Obtenha o quinto documento no banco de banco de dados para o seletor de critérios.

Exemplos:

Obtenha o quinto documento.

context.fifth

Retorna:

  • (Document | nil)

    O quinto documento ou nulo se nenhum for encontrado.



699
700
701
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 699

def quinto
  retrieve_nth(4)
end

#quinto!Documento

Obtenha o quinto documento no banco de banco de dados para o seletor dos critérios ou gere um erro se nenhum for encontrado.

Exemplos:

Obtenha o quinto documento.

context.fifth!

Retorna:

Aumenta:



713
714
715
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 713

def quinto!
  quinto || create_document_not_Found_error
end

#find_first ➤ Objeto

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Retornar o primeiro resultado sem aplicar classificação



256
257
258
259
260
261
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 256

def find_first
  se bruto_doc = vista.primeiro
    doc = Factory.from_db(classe, bruto_doc, critério)
    modified_load([doc]).primeiro
  end
end

#find_one_and_delete ➤ Documento

Execute o comando localizar e modificar, usado para o $findAndModify do MongoDB. Isso exclui o documento encontrado.

Exemplos:

Execute o comando.

context.find_one_and_delete

Retorna:



247
248
249
250
251
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 247

def find_one_and_delete
  se doc = vista.find_one_and_delete
    Factory.from_db(classe, doc)
  end
end

#find_one_and_replace(substituição, opções = {}) ➤ Documento

Execute o comando localizar e modificar, usado para o $findAndModify do MongoDB.

Exemplos:

Execute o comando.

context.find_one_and_update({ likes: 1 })

Parâmetros:

  • substituição (Hash)

    A substituição.

  • opções (Hash) (padrão para: {})

    As opções de comando.

Hash de opções (opções):

  • :return_document (:before | :after)

    Retorne o documento atualizado antes ou depois da atualização.

  • :upsert (verdadeiro | falso)

    Crie o documento se ele não existir.

Retorna:



234
235
236
237
238
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 234

def find_one_and_replace(substituição, opções = {})
  se doc = vista.find_one_and_replace(substituição, opções)
    Factory.from_db(classe, doc)
  end
end

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

Execute o comando localizar e modificar, usado para o $findAndModify do MongoDB.

Exemplos:

Execute o comando.

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

Parâmetros:

  • update (Hash)

    As atualizações.

  • opções (Hash) (padrão para: {})

    As opções de comando.

Hash de opções (opções):

  • :return_document (:before | :after)

    Retorne o documento atualizado antes ou depois da atualização.

  • :upsert (verdadeiro | falso)

    Crie o documento se ele não existir.

Retorna:



214
215
216
217
218
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 214

def find_one_and_update(update, opções = {})
  se doc = vista.find_one_and_update(update, opções)
    Factory.from_db(classe, doc)
  end
end

#first(limit = nil) ➤ Documento | nil Também conhecido como: um

Observação:

Adicionar automaticamente uma classificação no _id quando nenhuma outra classificação está definida nos critérios tem o potencial de causar problemas de desempenho ruins. Se você tiver um desempenho ruim inesperado ao usar #first ou #last e não tiver nenhuma classificação definida nos critérios, use #take em vez disso. Esteja ciente de que #take não garante o pedido.

Obtenha o primeiro documento no banco de banco de dados para o seletor dos critérios.

Exemplos:

Obtenha o primeiro documento.

context.first

Parâmetros:

  • limit (Inteiro) (padrão para: nil)

    O número de documentos a retornar.

Retorna:

  • (Document | nil)

    O primeiro documento ou nulo se nenhum for encontrado.



550
551
552
553
554
555
556
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 550

def primeiro(limit = nada)
  se limit.nada?
    retrieve_nth(0)
  mais
    retrieve_nth_with_limit(0, limit)
  end
end

#primeiro!Documento

Observação:

Adicionar automaticamente uma classificação no _id quando nenhuma outra classificação está definida nos critérios tem o potencial de causar problemas de desempenho ruins. Se você tiver um desempenho ruim inesperado ao usar o #first! ou #last! e não tiver nenhuma classificação definida nos critérios, use #take! no lugar. Esteja ciente de que #take! não garante o pedido.

Obtenha o primeiro documento no banco de banco de dados para o seletor dos critérios ou gere um erro se nenhum for encontrado.

Exemplos:

Obtenha o primeiro documento.

context.first!

Retorna:

Aumenta:



575
576
577
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 575

def primeiro!
  primeiro || create_document_not_Found_error
end

#quartoDocumento | nada

Obtenha o quarto documento no banco de banco de dados para o seletor dos critérios.

Exemplos:

Obtenha o quarto documento.

context.fourth

Retorna:

  • (Document | nil)

    O quarto documento ou nulo se nenhum for encontrado.



675
676
677
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 675

def quarto
  retrieve_nth(3)
end

#quarto!Documento

Obtenha o quarto documento no banco de banco de dados para o seletor dos critérios ou gere um erro se nenhum for encontrado.

Exemplos:

Obtenha o quarto documento.

context.fourth!

Retorna:

Aumenta:



689
690
691
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 689

def quarto!
  quarto || create_document_not_Found_error
end

#last(limit = nil) ⇒ Document | nil

Observação:

Adicionar automaticamente uma classificação no _id quando nenhuma outra classificação está definida nos critérios tem o potencial de causar problemas de desempenho ruins. Se você tiver um desempenho ruim inesperado ao usar #first ou #last e não tiver nenhuma classificação definida nos critérios, use #take em vez disso. Esteja ciente de que #take não garante o pedido.

Obtenha o último documento no banco de banco de dados para o seletor dos critérios.

Exemplos:

Obtenha o último documento.

context.last

Parâmetros:

  • limit (Inteiro) (padrão para: nil)

    O número de documentos a retornar.

Retorna:

  • (Document | nil)

    O último documento ou nulo se nenhum for encontrado.



593
594
595
596
597
598
599
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 593

def último(limit = nada)
  se limit.nada?
    retrieve_nth_to_last(0)
  mais
    retrieve_nth_to_last_with_limit(0, limit)
  end
end

#último!Documento

Observação:

Adicionar automaticamente uma classificação no _id quando nenhuma outra classificação está definida nos critérios tem o potencial de causar problemas de desempenho ruins. Se você tiver um desempenho ruim inesperado ao usar o #first! ou #last! e não tiver nenhuma classificação definida nos critérios, use #take! no lugar. Esteja ciente de que #take! não garante o pedido.

Obtenha o último documento no banco de banco de dados para o seletor dos critérios ou gere um erro se nenhum for encontrado.

Exemplos:

Obtenha o último documento.

context.last!

Retorna:

Aumenta:



617
618
619
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 617

def último!
  último || create_document_not_Found_error
end

#comprimentoInteiro Também conhecido como: tamanho

Retorna o número de documentos no banco de dados de dados que correspondem ao seletor de consulta.

Exemplos:

Obtenha o comprimento.

context.length

Retorna:

  • (Inteiro)

    O número de documentos.



287
288
289
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 287

def Tamanho
  auto.contar
end

#limite(valor) ➤ mongo

Limita o número de documentos retornados do banco de banco de dados.

Exemplos:

Limite os documentos.

context.limit(20)

Parâmetros:

  • valor (Inteiro)

    O número de documentos a retornar.

Retorna:

  • (mongo)

    O contexto.



300
301
302
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 300

def limit(valor)
  @view = vista.limit(valor) e a auto
end

#load_async ➤ Objeto

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Agende uma tarefa para carregar documentos para o contexto.

Dependendo da configuração do Mongoid, a tarefa agendada pode ser executada imediatamente na conversa do chamador ou pode ser agendada para uma execução assíncrona.



776
777
778
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 776

def load_async
  @documents_loader ||= DocumentsLoader.Novo(vista, classe, critério)
end

#map_reduce(mapear, reduzir) ➤ MapReduce

Inicie uma operação de mapeamento/redução a partir do contexto.

Exemplos:

Inicie um mapa/redução.

context.map_reduce(map, reduce)

Parâmetros:

  • map (string)

    A função JavaScript do mapa.

  • reduzir (string)

    A função reduzir JavaScript .

Retorna:

  • (MapReduce)

    O wrapper preguiçoso de mapa/redução .



313
314
315
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 313

def map_reduce(map, reduzir)
  Redução de mapa.Novo(collection, critério, map, reduzir)
end

#pick(*fields) ➤ Objeto | Array<Object>

Escolha os valores de campo único no banco de banco de dados.

Exemplos:

Escolha um campo.

context.pick(:_id)

Parâmetros:

  • *fields ([ string | Símbolo ]...)

    Campo(s) a ser escolhido(s).

Retorna:

  • (Object | Array<Object>)

    Os valores escolhidos.



361
362
363
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 361

def escolher(*Campos)
  limit(1).raspar(*Campos).primeiro
end

#pluck(*fields) ➤ Array<Object> | Array <Array<Object>>

Arrancar o(s) valor(es) de campo do banco de dados de dados. Retorna um resultado para cada documento encontrado no banco de banco de dados para o contexto. Os resultados são normalizados de acordo com seus tipos de campo Mongoid. Observe que os resultados podem incluir duplicatas e valores nulos.

Exemplos:

Arraste um campo.

context.pluck(:_id)

Parâmetros:

  • *fields ([ string | Símbolo ]...)

    Campo(s) a ser(em) removido(s), que podem incluir campos aninhados usando notação de ponto.

Retorna:

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

    Os valores colhidos. Se o *fields arg contiver um único valor, cada resultado na array será um único valor. Caso contrário, cada resultado na array será uma array de valores.



333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 333

def raspar(*Campos)
  # Vários campos podem mapear para o mesmo nome de campo. Por exemplo, podar
  # um campo e seu mapa de campo _translations para o mesmo campo no banco de banco de dados.
  # por isso precisamos manter o controle dos campos solicitados.
  normalized_field_names = []
  normalized_select = Campos.injetar({}) fazer |hash, f|
    db_fn = classe.database_field_name(f)
    normalized_field_names.push(db_fn)
    hash[classe.Clean_localized_field_names(f)] = true
    hash
  end

  vista.projeção(normalized_select).reduzir([]) fazer |colhidas, doc|
    values = normalized_field_names.map fazer |n|
      extract_value(doc, n)
    end
    colhidas << (values.Tamanho == 1 ? values.primeiro : values)
  end
end

#segundoDocumento | nada

Obtenha o segundo documento no banco de banco de dados para o seletor dos critérios.

Exemplos:

Obtenha o segundo documento.

context.second

Retorna:

  • (Document | nil)

    O segundo documento ou nulo se nenhum for encontrado.



627
628
629
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 627

def Segundo
  retrieve_nth(1)
end

#segundo!Documento

Obtenha o segundo documento no banco de banco de dados para o seletor dos critérios ou gere um erro se nenhum for encontrado.

Exemplos:

Obtenha o segundo documento.

context.second!

Retorna:

Aumenta:



641
642
643
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 641

def segundo!
  Segundo || create_document_not_Found_error
end

#segundo_para_último ➤ Documento | nada

Obtenha o penúltimo documento no banco de banco de dados para o seletor de critérios.

é encontrado.

Exemplos:

Obtenha o penúltimo documento.

context.second_to_last

Retorna:

  • (Document | nil)

    O penúltimo documento ou nulo se não houver nenhum



725
726
727
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 725

def segundo_to_last
  retrieve_nth_to_last(1)
end

#segundo_para_último!Documento

Obtenha o penúltimo documento no banco de banco de dados para o seletor dos critérios ou gere um erro se nenhum for encontrado.

Exemplos:

Obtenha o penúltimo documento.

context.second_to_last!

Retorna:

Aumenta:



739
740
741
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 739

def segundo_to_last!
  segundo_to_last || create_document_not_Found_error
end

#skip(value) ➤ mongo

Ignora o número fornecido de documentos.

Exemplos:

Ignore os documentos.

context.skip(20)

Parâmetros:

  • valor (Inteiro)

    O número de documentos a ignorar.

Retorna:

  • (mongo)

    O contexto.



480
481
482
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 480

def ignorar(valor)
  @view = vista.ignorar(valor) e a auto
end

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

Classifica os documentos pela especificação fornecida.

Exemplos:

Classifique os documentos.

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

Parâmetros:

  • values (Hash) (padrão para: nil)

    Os valores de classificação como pares de campo/direção(1/-1).

Retorna:

  • (mongo)

    O contexto.



493
494
495
496
497
498
499
500
501
502
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 493

def sort(values = nada, &noum: bloco ; verb: bloquear)
  se block_given?
    super(&noum: bloco ; verb: bloquear)
  mais
    # atualize os critérios
    @criteria = critério.order_by(values)
    apply_option(:sort)
    auto
  end
end

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

Pegue o número fornecido de documentos do banco de dados.

Exemplos:

Pegue 10 documentos

context.take(10)

Parâmetros:

  • limit (Inteiro | nulo) (padrão para: nil)

    O número de documentos a serem devolvidos ou nulo.

Retorna:

  • (Documento | Array <Documento>)

    A lista de documentos, ou um documento se nenhum valor foi fornecido.



374
375
376
377
378
379
380
381
382
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 374

def levar(limit = nada)
  se limit
    limit(limit).to_a
  mais
    # Faça to_a primeiro para que o método Mongo#first não seja usado e o
    # resultado não classificado.
    limit(1).to_a.primeiro
  end
end

#take!Document

Pegue um documento do banco de dados e gere um erro se não houver nenhum.

Exemplos:

Pegar um documento

context.take!

Retorna:

Aumenta:



393
394
395
396
397
398
399
400
401
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 393

def pegue!
  # Faça to_a primeiro para que o método Mongo#first não seja usado e o
  # resultado não classificado.
  se fst = limit(1).to_a.primeiro
    fst
  mais
    aumentar Errors::DocumentNotFound.Novo(classe, nada, nada)
  end
end

#tally(campo) ➤ Hash

Obtenha um hash de contagens para os valores de um único campo. Por exemplo, se os seguintes documentos estivessem no banco de dados:

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

Model.tally("age")

daria o seguinte resultado:

{ 21 => 2, 22 => 1 }

Ao contar um campo dentro de uma array ou associaçã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")

As chaves do hash resultante são arrays:

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

Observe que, se registrar um elemento em uma matriz de hashes e a chave não existir em alguns dos hashes, a contagem não incluirá essas chaves nulas no hash resultante:

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

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

Parâmetros:

  • Campo (string | Símbolo)

    O nome do campo .

Retorna:

  • (Hash)

    O hash das contagens.



440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 440

def contagem(Campo)
  name = classe.Clean_localized_field_names(Campo)

  fld = classe.traverse_association_tree(name)
  gasoduto = [ { "$group" => { _id: "$#{nome}", conta: { "$sum": 1 } } } ]
  pipeline.unshift("$match" => visualizar.filtro) a menos que vejao.filtro.em branco?

  collection.agregado(pipeline).reduzir({}) fazer |registros, doc|
    is_translation = "#{name}_translations" == campo.to_s
    valor = documento["_id"]

    chave = se valor.is_a?(Array)
      valid.mapa do |v|
        demongoize_with_field(fld, v, is_translation)
      end
    outra
      demongoize_with_field(fld, valid, is_translation)
    end

    # O único momento em que uma chave já existirá no hash de registros
    # é quando os valores são armazenados de forma diferente no banco de banco de dados, mas
    #mongoize para o mesmo valor. Um bom exemplo de quando isso acontece
    # é ao usar campos localizados. Embora a consulta do servidor não agrupe
    # hashes que tenham outros valores em idiomas diferentes, o
    valor desmongoizado é apenas a tradução na locale atual,
    # que pode ser o mesmo em vários desses hashes desiguais.
    talries[key] ||= 0
    talries[key] += doc["counts"]
    talries
  end
end

#terceiroDocumento | nada

Obtenha o terceiro documento no banco de banco de dados para o seletor dos critérios.

Exemplos:

Obtenha o terceiro documento.

context.third

Retorna:

  • (Document | nil)

    O terceiro documento ou nulo se nenhum for encontrado.



651
652
653
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 651

def terceiro
  retrieve_nth(2)
end

#terceiro!Documento

Obtenha o terceiro documento no banco de banco de dados para o seletor dos critérios ou gere um erro se nenhum for encontrado.

Exemplos:

Obtenha o terceiro documento.

context.third!

Retorna:

Aumenta:



665
666
667
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 665

def terceiro!
  terceiro || create_document_not_Found_error
end

#terceiro_to_last ➤ Documento | nada

Obtenha o penúltimo documento no banco de banco de dados para o seletor de critérios.

é encontrado.

Exemplos:

Obtenha o penúltimo documento.

context.third_to_last

Retorna:

  • (Document | nil)

    O penúltimo documento ou nulo se nenhum



751
752
753
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 751

def terceiro_to_last
  retrieve_nth_to_last(2)
end

#terceiro_to_last!Documento

Obtenha o penúltimo documento no banco de banco de dados para o seletor do critério ou gere um erro se nenhum for encontrado.

Exemplos:

Obtenha o penúltimo documento.

context.third_to_last!

Retorna:

Aumenta:



765
766
767
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 765

def terceiro_to_last!
  terceiro_to_last || create_document_not_Found_error
end

#atualização(atributos = nil, opts = {}) ➤ nil | false

Atualize o primeiro documento correspondente atomicamente.

Exemplos:

Atualize o primeiro documento correspondente.

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

Parâmetros:

  • attributes (Hash) (padrão para: nil)

    Os novos atributos para o documento.

  • opciona (Hash) (padrão para: {})

    As opções de operação de atualização.

Hash de opções (opts):

  • :array_filters (Array)

    Um conjunto de filtros que especificam a quais elementos da array uma atualização deve ser aplicada.

Retorna:

  • (nil | false)

    Falso se nenhum atributo foi fornecido.



516
517
518
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 516

def update(attributes = nada, opciona = {})
  update_documents(attributes, :update_one, opciona)
end

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

Atualize todos os documentos correspondentes atomicamente.

Exemplos:

Atualize todos os documentos correspondentes.

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

Parâmetros:

  • attributes (Hash) (padrão para: nil)

    Os novos atributos para cada documento.

  • opciona (Hash) (padrão para: {})

    As opções de operação de atualização.

Hash de opções (opts):

  • :array_filters (Array)

    Um conjunto de filtros que especificam a quais elementos da array uma atualização deve ser aplicada.

Retorna:

  • (nil | false)

    Falso se nenhum atributo foi fornecido.



532
533
534
# Arquivo 'lib/mongoid/contextual/mongo.rb', linha 532

def update_all(attributes = nada, opciona = {})
  update_documents(attributes, :update_many, opciona)
end