Classe: Mongoid::Criteria

Herda:
Objeto
  • Objeto
mostrar tudo
Inclui:
Enumerável, Inspecionável , Mongoid::Clients::Options, Mongoid::Clients::Sessions, Contextual, Localizável, Includable, Ordenadopor , Modificável , Opções, Queryable , Escopo
Definido em:
lib/mongoid/criteria.rb,
lib/mongoid/criteria/options.rb,
lib/mongoid/criteria/findable.rb,
lib/mongoid/criteria/scopable.rb,
lib/mongoid/criteria/queryable.rb,
lib/mongoid/criteria/includable.rb,
lib/mongoid/criteria/modavailable.rb,
lib/mongoid/criteria/permission.rb,
lib/mongoid/criteria/translator.rb,
lib/mongoid/criteria/marshable.rb,
lib/mongoid/criteria/queryable/key.rb,
lib/mongoid/criteria/queryable/smash.rb,
lib/mongoid/criteria/queryable/options.rb,
lib/mongoid/criteria/queryable/optional.rb,
lib/mongoid/criteria/queryable/pipeline.rb,
lib/mongoid/criteria/queryable/selector.rb,
lib/mongoid/criteria/queryable/storable.rb,
lib/mongoid/criteria/queryable/macroable.rb,
lib/mongoid/criteria/queryable/mergeable.rb,
lib/mongoid/criteria/queryable/aggregable.rb,
lib/mongoid/criteria/queryable/expandable.rb,
lib/mongoid/criteria/queryable/selectable.rb,
lib/mongoid/criteria/queryable/extensions/set.rb,
lib/mongoid/criteria/queryable/extensions/date.rb,
lib/mongoid/criteria/queryable/extensions/hash.rb,
lib/mongoid/criteria/queryable/extentions/time.rb,
lib/mongoid/criteria/queryable/extentions/array.rb,
lib/mongoid/criteria/queryable/extensions/range.rb,
lib/mongoid/criteria/queryable/extensão/ objeto.rb,
lib/mongoid/criteria/queryable/extensions/regexp.rb,
lib/mongoid/criteria/queryable/extensions/string.rb,
lib/mongoid/criteria/queryable/extensions/symbol.rb,
lib/mongoid/criteria/queryable/extensions/boolean.rb,
lib/mongoid/criteria/queryable/extentions/numeric.rb,
lib/mongoid/criteria/queryable/extentions/date_time.rb,
lib/mongoid/criteria/queryable/extentions/nil_class.rb,
lib/mongoid/criteria/queryable/extentions/big_decimal.rb,
lib/mongoid/criteria/queryable/extensions/time_with_zone.rb

Visão geral

A classe Criteria é o objeto principal necessário no Mongoid para recuperar objetos do banco de banco de dados. É um DSL que essencialmente define o seletor e as opções de argumentos que são passados para uma Mongo::Collection no driver Ruby. Cada método no Criteria retorna a si mesmo para eles podem ser encadeados a fim de criar um critério legível a ser executado no banco de banco de dados.

Definido sob namespace

Módulos: Localizável, Includable, Secundável, Modificável, Opções, Permissão, Queryable, Escopável, Tradutor

Colapsode resumo constante

Verificar =

Array estática usada para verificar com o método ausente - só precisamos instanciar uma vez.

[]

Recolhimento do Resumo do atributo de instância

Atributos incluídos de Modificável

#create_attrs, #create_attrs Atributos adicionais a serem adicionados ao documento após a criação.

Atributos incluídos no Queryable

#aliases, #aliases Os aliases., #serializers, #serializers Os serializadores.

Atributos incluídos de Queryable::Optional

#options, #options As opções de query.

Atributos incluídos de Queryable::aggregable

#aggregating, #aggregating Sinalizador se estamos ou não agregando., #pipeline, #pipeline O agregação pipeline.

Atributos incluídos de Queryable::Mergeable

#strategy, #strategy O nome da estratégia atual.

Recolhimento do Resumo do método de classe

Recolhimento do Resumo do método de instância

Métodos incluídos do Mongoid::Clients::Sessions

incluído

Métodos incluídos do Mongoid::Clients::Options

#collection, #collection_name, #mongo_client, #persistence_context, #persistence_context?, #com

Métodos incluídos no Scoped

#apply_default_scope, #apply_scope, #remove_scoping, #scoped, #scoped?, #scoping_options, #scoping_options=, #unscoped, #unscoped?, #with_default_scope

Métodos incluídos do Modificável

#build, #create, #create !, #create_with, #find_or_create_by, #find_or_create_by!, #find_or_initialize_by, #first_or_create, #first_or_create!, #first_or_initialize

Métodos incluídos noMarshable

.

Métodos incluídos de Includable

#includes, #incluses, #incluses=

Métodos incluídos no Findable

#execute_or_raise, #for_ids, #multiple_from_db

Métodos incluídos do Queryable::Optional

#ascending, #batch_size, #collation, #comment, #cursor_type, #descending, forwardables, #hint, #limit, #max_scan, #max_time_ms, #no_timeout, #order_by, #reorder, #skip, #slice, #snapshot

Métodos incluídos do Queryable::macroable

#key

Métodos incluídos em Selectable

#atomic_selector

Métodos incluídos do Queryable::Aggregable

#aggregating?, #group, #project, #unwind

Métodos incluídos do Queryable::Mergeable

#and_with_operator, #intersect, #override, #reset_strategies!, # união

Métodos incluídos do Queryable::Storable

#add_field_expression, #add_logical_operator_expression, #add_one_expression, #add_operator_expression

Métodos incluídos do Contexto

#context, #load_async

Detalhes do construtor

#initialize(klass) ⇒ Criteria

Inicialize os novos critérios.

Exemplos:

Inicie os novos critérios.

Criteria.new(Band)

Parâmetros:

  • classe (Classe)

    A classe modelo.



233
234
235
236
237
238
# Arquivo 'lib/mongoid/criteria.rb', linha 233

def inicializar(classe)
  @klass = classe
  @embedded = nada
  @none = nada
  classe ? super(classe.aliased_fields, classe.Campos, classe.relações, classe.aliased_associations) : super({}, {}, {}, {})
end

Manipulação de métodos dinâmicos

Esta classe lida com métodos dinâmicos através do método method_missing

#method_missing ➤ Object (private)

Usado para encadear escopos Criteria no for dos métodos de classe no Document o qual os critérios são.

Exemplos:

Método de manuseio ausente.

criteria.method_missing(:name)

Parâmetros:

  • name (Símbolo)

    O nome do método.

  • *args (Objeto...)

    Os argumentos.

Retorna:

  • (Objeto)

    O resultado da chamada de método.



530
531
532
533
534
535
536
537
538
539
540
# Arquivo 'lib/mongoid/criteria.rb', linha 530

ruby2_keywords def method_missing(name, *Args, &noum: bloco ; verb: bloquear)
  se classe.respond_to?(name)
    classe.enviar(:with_scope, auto) fazer
      classe.enviar(name, *Args, &noum: bloco ; verb: bloquear)
    end
  elsif Verificar.respond_to?(name)
    Método entradas.enviar(name, *Args, &noum: bloco ; verb: bloquear)
  mais
    super
  end
end

Detalhes do atributo da instância

#associaçãoObjeto

Retorna o valor da associação de atributo.



68
69
70
# Arquivo 'lib/mongoid/criteria.rb', linha 68

def associação
  @association
end

#Objetoincorporado

Retorna o valor do atributo incorporado.



68
69
70
# Arquivo 'lib/mongoid/criteria.rb', linha 68

def incorporado
  @embedded
end

#klassObject

Retorna o valor do atributo klass.



68
69
70
# Arquivo 'lib/mongoid/criteria.rb', linha 68

def classe
  @klass
end

#parent_document ➤ Objeto

Retorna o valor do atributo parent_document.



68
69
70
# Arquivo 'lib/mongoid/criteria.rb', linha 68

def parent_document
  @parent_document
end

Detalhes do método de classe

.from_hash(hash) ➤ Critérios

Converta o hash fornecido em um critério. Irá iterar sobre cada chave no hash que deve corresponder ao método em um objeto de critérios . O hash também deve incluir uma chave "klass".

Exemplos:

Converta o hash em um critério.

Criteria.from_hash({ klass: Band, where: { name: "Depeche Mode" })

Parâmetros:

  • hash (Hash)

    O hash a ser convertido.

Retorna:



55
56
57
58
59
60
61
# Arquivo 'lib/mongoid/criteria.rb', linha 55

def from_hash(hash)
  critério = critério.Novo(hash.excluir(:klass) || hash.excluir('klass'))
  hash.cada_pair fazer |Método, Args|
    critério = critério.__send__(Método, Args)
  end
  critério
end

Detalhes do método de instância

#==(outro) ➤ verdadeiro | false

Observação:

Isso forçará um carregamento de banco de dados de dados quando chamado se um enumerável for passado.

Retorna verdadeiro se o Enumerable ou Criteria fornecido for igual aos resultados deste Criteria ou aos próprios critérios.

Parâmetros:

  • Outro (Objeto)

    O outro Enumerable ou Criteria para comparar.

Retorna:

  • (verdadeiro | falso)

    Se os objetos forem iguais.



78
79
80
81
# Arquivo 'lib/mongoid/criteria.rb', linha 78

def ==(Outro)
  Método super se Outro.respond_to?(:selector)
  entradas == Outro
end

#_enumerable_findObject

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.



26
# Arquivo 'lib/mongoid/criteria.rb', linha 26

Alias :_enumerable_find :find

#_findable_find ➤ 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.



33
# Arquivo 'lib/mongoid/criteria.rb', linha 33

Alias :_findable_find :find

#as_json(options = nil) ⇒ String

Necessário para obter corretamente um critério de volta como JSON

Exemplos:

Obtenha os critérios como JSON.

Person.where(:title => "Sir").as_json

Parâmetros:

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

    Opções a serem passadas para o serializador.

Retorna:

  • (string)

    A string JSON.



140
141
142
# Arquivo 'lib/mongoid/criteria.rb', linha 140

def as_json(opções = nada)
  entradas.as_json(opções)
end

#documentsArray<Document>

Obtenha os documentos a partir dos critérios incorporados.

Exemplos:

Pegue os documentos.

criteria.documents

Retorna:



150
151
152
# Arquivo 'lib/mongoid/criteria.rb', linha 150

def documentos
  @documents ||= []
end

#documents=(docs) ⇒ Array<Document>

Defina os documentos incorporados nos critérios.

Exemplos:

Defina os documentos.

Parâmetros:

  • Docs (Array <Document>)

    Os documentos incorporados.

Retorna:

  • (Array <Document>)

    Os documentos incorporados.



161
162
163
# Arquivo 'lib/mongoid/criteria.rb', linha 161

def documentos=(Docs)
  @documents = Docs
end

#incorporado?verdadeiro | false

Os critérios são para documentos incorporados?

Exemplos:

Os critérios são para documentos incorporados?

criteria.embedded?

Retorna:

  • (verdadeiro | falso)

    Se o critério estiver incorporado.



171
172
173
# Arquivo 'lib/mongoid/criteria.rb', linha 171

def incorporado?
  !!@embedded
end

#empty_and_chainable?verdadeiro | false

O critério é um critério vazio, mas acorrentador?

Exemplos:

O critério é nenhum critério?

criteria.empty_and_chainable?

Retorna:

  • (verdadeiro | falso)

    Se o critério não for nenhum.



301
302
303
# Arquivo 'lib/mongoid/criteria.rb', linha 301

def empty_and_chainable?
  !!@none
end

#extract_id ➤ Objeto

Extraia um único ID dos critérios fornecidos. Pode estar em uma query $and ou uma query _id direta.

Exemplos:

Extraia o ID.

criteria.extract_id

Retorna:

  • (Objeto)

    O ID.



182
183
184
# Arquivo 'lib/mongoid/criteria.rb', linha 182

def extract_id
  seletor['_id'] || seletor[:_id] || seletor['ID'] || seletor[:id]
end

#extras(extras) ⇒ Criteria

Adiciona um critério ao Criteria que especifica opções adicionais a serem passadas para o driver Ruby, no formato exato do driver.

criteria.extras(:limit => 20, :skip => 40)

Exemplos:

Adicione parâmetros extras aos critérios.

Parâmetros:

  • Extras (Hash)

    As opções extras do driver.

Retorna:



195
196
197
198
199
# Arquivo 'lib/mongoid/criteria.rb', linha 195

def Extras(Extras)
  crit = clonar
  crit.opções.mesclar!(Extras)
  crit
end

#field_list ➤ Array<String>

Obtenha a lista de campos incluídos.

Exemplos:

Obtenha a lista de campo .

criteria.field_list

Retorna:

  • (Array<String>)

    Os campos.



207
208
209
210
211
212
213
# Arquivo 'lib/mongoid/criteria.rb', linha 207

def field_list
  se opções[:fields]
    opções[:fields].keys.rejeitar{ |chave| chave == classe.discriminator_key }
  mais
    []
  end
end

#find(*args) {|Object| ... } ⇒ Document | Array<Document> | nil

Observação:

Cada argumento pode ser um ID individual, uma array de ids ou uma array agrupada. Cada array será achatada.

Localiza um ou vários documentos de acordo com os valores _id fornecidos ou filtra os documentos no escopo atual no espaço do processo do aplicação depois de carregá-los, se necessário.

Se este método não receber um bloco, ele delegará para Findable#find e localizará um ou muitos documentos para os valores de _id fornecidos.

Se esse método receber um bloco, ele delegará para Enumerable#find e retornará o primeiro documento daqueles encontrados pelo objeto Crieria atual para o qual o bloco retorna um valor verdadeiro.

Observe que o argumento "default proc" de Enumerable não é tratado especialmente pelo Mongoid - a decisão entre delegar para Findable versus Enumerable é feita somente com base no fato find passar a um bloqueio.

Exemplos:

Localiza um documento por seu _id, invoca Findable#find.

critera.find("1234")

Localiza o primeiro documento correspondente usando um bloco, invoca Enumerable#find.

criteria.find { |item| item.name == "Depeche Mode" }

Encontra o primeiro documento correspondente usando um bloco usando o Proc padrão, invoca Enumerable#find.

criteria.find(-> { "Default Band" }) { |item| item.name == "Milwaukee Mode" }

Tenta encontrar um documento cujo _id seja a stringificação do Proc fornecido, normalmente falha.

enumerator = criteria.find(-> { "Default Band" })

Parâmetros:

  • *args ([ Object | Array<Object> ]...)

    Os ID(s).

  • &block

    Bloco opcional a ser aprovado.

Rendimento:

  • (Objeto)

    Fornece cada elemento enumerável para o bloco.

Retorna:

Aumenta:

  • Erros::DocumentNotFound Se os parâmetros forem valores _id e nem todos os documentos forem encontrados, e a opção de configuração Mongoid raise_not_found_error for truey.

Veja também:



124
125
126
127
128
129
130
# Arquivo 'lib/mongoid/criteria.rb', linha 124

def find(*Args, &noum: bloco ; verb: bloquear)
  se block_given?
    _enumerable_find(*Args, &noum: bloco ; verb: bloquear)
  mais
    _findable_find(*Args)
  end
end

#for_js(JavaScript, scope = {}) ➤ Critérios

Obsoleto.

Encontre documentos pelo JavaScript e escopo fornecidos. Usa um $where, mas é diferente de Criteria#where , pois passará um objeto de código para a query em vez de uma string pura. Seguro contra ataques de injeção de JavaScript .

Exemplos:

Encontrar por JavaScript.

Band.for_js("this.name = param", param: "Tool")

Parâmetros:

  • JavaScript (string)

    O JavaScript a ser executado no $where.

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

    O escopo do código.

Retorna:



466
467
468
469
470
471
472
473
474
# Arquivo 'lib/mongoid/criteria.rb', linha 466

def for_js(JavaScript, escopo = {})
  código = se escopo.vazio?
    # CodeWithScope não é suportado para $where a partir do MongoDB 4.4
    BSON::Código.Novo(JavaScript)
  mais
    BSON::CodeWithScope.Novo(JavaScript, escopo)
  end
  js_query(código)
end

#freezeCriteria

Ao congelar um critério, precisamos inicializar o contexto primeiro, caso contrário, a configuração do contexto em uma tentativa de iteração gerará um erro de tempo de execução.

Exemplos:

Congele os critérios.

criteria.freeze

Retorna:



223
224
225
# Arquivo 'lib/mongoid/criteria.rb', linha 223

def congelar
  Contexto e a inclusões e a super
end

#mesclar(outro) ➤ Critérios

Mescle outro objeto com este Criteria e retorna um novo critério. O outro objeto pode ser Criteria ou Hash. Isso é usado para combinar vários escopos, onde uma situação de escopo encadeado pode ser desejada.

Exemplos:

Mesclar os critérios com outros critérios.

criteria.merge(other_criteria)

Mescle os critérios com um hash. O hash deve conter uma klass

key and the key/value pairs correspond to method names/args.

criteria.merge({
  klass: Band,
  where: { name: "Depeche Mode" },
  order_by: { name: 1 }
})

Parâmetros:

  • Outro (Critérios)

    O outro critério para mesclar.

Retorna:



260
261
262
263
264
# Arquivo 'lib/mongoid/criteria.rb', linha 260

def mesclar(Outro)
  crit = clonar
  crit.mesclar!(Outro)
  crit
end

#merge!(outros) ➤ Critérios

Mesclar os outros critérios neste.

Exemplos:

Mesclar outros critérios a esse critério.

criteria.merge(Person.where(name: "bob"))

Parâmetros:

  • Outro (Critérios | Hash)

    Os critérios para a mesclagem.

Retorna:



274
275
276
277
278
279
280
281
282
# Arquivo 'lib/mongoid/criteria.rb', linha 274

def mesclar!(Outro)
  Outro = auto.classe.from_hash(Outro) se Outro.is_a?(Hash)
  seletor.mesclar!(Outro.seletor)
  opções.mesclar!(Outro.opções)
  auto.documentos = Outro.documentos.dup a menos que Outro.documentos.vazio?
  auto.scope_options = Outro.scope_options
  auto.inclusões = (inclusões + Outro.inclusões).uniq
  auto
end

#noneCritérios

Retorna um critério que sempre conterá zero resultados e nunca atinge o banco de dados de dados.

Exemplos:

Retorna um critério nenhum.

criteria.none

Retorna:



291
292
293
# Arquivo 'lib/mongoid/criteria.rb', linha 291

def none
  @none = true e a auto
end

#only(*args) ➤ Critérios

Substitua para incluir _type nos campos.

Exemplos:

Limite os campos retornados do banco de banco de dados.

Band.only(:name)

Parâmetros:

  • *args ([ Símbolo | Array<Símbolo><Symbol> ]...)

    O(s) nome(s) do campo .

Retorna:



313
314
315
316
317
318
319
320
321
322
323
# Arquivo 'lib/mongoid/criteria.rb', linha 313

def Apenas(*Args)
  Args = Args.achatar
  Método clonar se Args.vazio?
  se (Args & Campos::IDS).vazio?
    Args.unshift(:_id)
  end
  se classe.hereditário?
    Args.push(classe.discriminator_key.to_sym)
  end
  super(*Args)
end

#read(value = nil) ➤ Critérios

Defina a preferência de leitura para os critérios.

Exemplos:

Defina a preferência de leitura.

criteria.read(mode: :primary_preferred)

Parâmetros:

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

    A preferência de modo .

Retorna:



333
334
335
336
337
# Arquivo 'lib/mongoid/criteria.rb', linha 333

def ler(valor = nada)
  clonar.toque fazer |critério|
    critério.opções.mesclar!(ler: valor)
  end
end

#respond_to?(nome, include_private = false) ➤ true | false

Retorna verdadeiro se os critérios responderem ao método fornecido.

Exemplos:

Os critérios respondem ao método?

crtiteria.respond_to?(:each)

Parâmetros:

  • name (Símbolo)

    O nome do método de classe no Document.

  • include_private (verdadeiro | falso) (padrão para: false)

    Se incluir privados.

Retorna:

  • (verdadeiro | falso)

    Se os critérios responderem ao método.



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

def respond_to?(name, include_private = false)
  super || classe.respond_to?(name) || Verificar.respond_to?(name, include_private)
end

#to_criteriaCriteria

Obsoleto.

Conveniência para objetos que desejam ser mesclados em um critério.

Exemplos:

Converta em um critério.

criteria.to_criteria

Retorna:



374
375
376
# Arquivo 'lib/mongoid/criteria.rb', linha 374

def to_criteria
  auto
end

#to_proc ➤ Proc

Converta os critérios em um proc.

Exemplos:

Converta os critérios em um proc.

criteria.to_proc

Retorna:

  • (Proc)

    Os critérios agrupados.



385
386
387
# Arquivo 'lib/mongoid/criteria.rb', linha 385

def to_proc
  ->{ auto }
end

#type(tipos) ➤ Critérios

Adiciona um critério ao Criteria que especifica um tipo ou uma Array de tipos que devem ser correspondidos.

Exemplos:

Combine apenas modelos específicos.

criteria.type('Browser')
criteria.type(['Firefox', 'Browser'])

Parâmetros:

  • Tipos (Array<String>)

    Os tipos a serem comparados.

Retorna:



399
400
401
# Arquivo 'lib/mongoid/criteria.rb', linha 399

def type(Tipos)
  any_in(auto.discriminator_key.to_sym => Array(Tipos))
end

#onde(*args) ➤ Critérios

Este é o ponto de entrada geral para a maioria das consultas MongoDB. Isso cria um campo padrão: seleção de valor e seleção expandida com o uso de métodos de hash ou uma seleção $where se uma string for fornecida.

Exemplos:

Adicione uma seleção padrão.

criteria.where(name: "syd")

Adicione uma seleção JavaScript .

criteria.where("this.name == 'syd'")

Parâmetros:

  • *args ([ Hash | string ]...)

    A seleção padrão ou JavaScript string.

Retorna:

Aumenta:

  • (Javascript não suportado)

    Se for fornecida uma string e os critérios forem incorporados.



420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
# Arquivo 'lib/mongoid/criteria.rb', linha 420

def ONDE(*Args)
  # Anteriormente, este método exigia exatamente um argumento.
  # A partir de https://jira.mongodb.org/browse/MONGOID-4804 ele também aceita
  # zero arguments.
  # A implementação subjacente onde o super invoca suporta
  # qualquer número de argumentos, mas atualmente não permitimos vários
  # argumentos através deste método. Essa API pode ser reconfigurada na
  # futuro.
  se Args.Tamanho > 1
    aumentar ArgumentError, "Critérios#onde requer zero ou um argumento (dado #{args.comprimento})"
  end
  se Args.Tamanho == 1
    expressão = Args.primeiro
    se expressão.is_a?(::String) && incorporado?
      aumentar Errors::Javascript não suportado.Novo(classe, expressão)
    end
  end
  super
end

#sem(*args) ➤ Critérios

Substitua para excluir _id dos campos.

Exemplos:

Exclua campos retornados do banco de banco de dados.

Band.without(:name)

Parâmetros:

  • *args (Símbolo...)

    O(s) nome(s) do campo .

Retorna:



347
348
349
350
# Arquivo 'lib/mongoid/criteria.rb', linha 347

def sem(*Args)
  Args -= id_fields
  super(*Args)
end

#sem_opções ➤ Critérios

Obtenha uma versão desses critérios sem as opções.

Exemplos:

Obtenha os critérios sem opções.

criteria.without_options

Retorna:



446
447
448
449
450
# Arquivo 'lib/mongoid/criteria.rb', linha 446

def sem_opções
  crit = clonar
  crit.opções.Limpar
  crit
end