Módulo: Mongoid::Criteria::Queryable::Selectable
- Estendido por:
- macroable
- Definido em:
- lib/mongoid/criteria/queryable/selectable.rb
Visão geral
Um selecionável por query é selecionável, pois tem a capacidade de selecionar documento do banco de banco de dados. O módulo selecionável traz toda a funcionalidade para o selecionável que tem a ver com a criação de seletores do MongoDB .
Colapsode resumo constante
- LINE_STRING =
Constante para uma LineString $geometry.
'LineString'- PONTO =
Constante para um ponto $geometry.
'Ponto'- POLÍgono =
Constante para um polígono $geometry.
'Polígono'
Recolhimento do Resumo do atributo de instância
-
# objeto denegação
Retorna o valor do atributo negando.
- #negating Se a próxima expressão for negada.(Ifthe) ➤ Objeto
-
#seletor ➤ Objeto
Retorna o valor do seletor de atributo.
- #selector O seletor de consulta.(O seletor de query.) ➤ Objeto
Recolhimento do Resumo do método de classe
-
.forwardables ➤ Array<Symbol>
Obtenha os métodos no selecionável que pode ser encaminhado a partir de um modelo.
Recolhimento do Resumo do método de instância
-
#all(*criteria) ➤ Selectable (também: #all_in)
Adicione o critério $all.
-
#e(*critérios) ➤ Seleccionado (também: #all_of)
Adicione o critério $and.
-
#any_of(*criteria) ⇒ Seleccionado
Adiciona uma disjunção dos argumentos como uma restrição adicional aos critérios já existentes no receptor.
-
#entre(critério) ➤ Seleccionado
Adicione a seleção de intervalo.
-
#elem_match(critério) ⇒ Seleccionado
Selecione com um $elemMatch.
-
#eq(critério) ➤ Seleccionado
Adicione o critério $eq ao seletor.
-
#exists(critério) ➤ Seleccionado
Adicione a seleção $exists.
-
#expr_query(critério) ⇒ selecionável
privado
Adiciona a expressão especificada à query.
-
#geo_spatial(criterion) ⇒ selecionável
Adicione uma seleção $geoIntersects ou $geoWithin.
-
#gt(critério) ⇒ Seleccionado
Adicione o critério $gt ao seletor.
-
#gte(critério) ➤ Seleccionado
Adicione o critério $gte ao seletor.
-
#em(condição) ➤ selecionável (também: #any_in)
Adiciona a seleção $in ao selecionável.
-
#js_query(criterion) ⇒ selecionável
privado
Crie uma seleção de javascript.
-
#lt(critério) ⇒ Seleccionado
Adicione o critério $lt ao seletor.
-
#lte(critério) ⇒ Seleccionado
Adicione o critério $lte ao seletor.
-
#max_istance(criterion) ⇒ selecionável
Adicione uma seleção $maxDistance ao selecionável.
-
#mod(critério) ⇒ selecionável
Adiciona seleção $mod ao selecionável.
-
#ne ( critério) ➤ Seleccionado (também: #exclude)
Adiciona $ne seleção ao selecionável.
-
#próximo(critério) ➤ Seleccionado
Adiciona um critério $near a uma seleção geográfica.
-
#near_sphere(criterion) ⇒ selecionável
Adiciona um critério $nearSphere a uma seleção geográfica.
-
#negando? ➤ verdadeiro | false
O selecionável atual está negando a próxima seleção?
-
#nin(condição) ➤ selecionável (também: #not_in)
Adiciona a seleção $nin ao selecionável.
-
#none_of(*critérios) ➤ Selecionado
Negue os argumentos, restringindo a query apenas aos documentos que NÃO correspondem aos argumentos.
-
#nor(*critérios) ➤ Seleccionado
Adiciona seleção $nor ao selecionável.
-
#não(*critérios) ⇒ Seleccionado
Negue os argumentos ou a próxima seleção se nenhum argumento for fornecido.
-
#ou(*critérios) ⇒ Seleccionado
Cria uma disjunção usando $or a partir dos critérios existentes no receptor e dos argumentos fornecidos.
-
#text_search(termos, opts = nil) ➤ Seleccionado
Construa um seletor de texto do Atlas Search .
-
#onde(*critérios) ➤ Seleccionado
Este é o ponto de entrada geral para a maioria das consultas MongoDB .
-
#with_size(critério) ⇒ Seleccionado
Adicione uma seleção $size para campos de array.
-
#with_type(critério) ➤ Seleccionado
Adiciona uma seleção $type ao selecionável.
Métodos incluídos do macroable
Detalhes do atributo da instância
# objetode negação
Retorna o valor do atributo negando.
23 24 25 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 23 def negando @ negando end |
#negating Se a próxima expressão for negada.(Se o) ➤ Objeto
23 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 23 attr_accessor : negating, :selector |
#seletor ➤ Objeto
Retorna o valor do seletor de atributo.
23 24 25 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 23 def seletor @selector end |
#selector O seletor de consulta.(O seletor de query.) ➤ Objeto
23 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 23 attr_accessor : negating, :selector |
Detalhes do método de classe
.forwardables ➤ Array<Symbol>
Obtenha os métodos no selecionável que pode ser encaminhado a partir de um modelo.
883 884 885 886 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 883 def encaminháveis public_instance_methods(false) - %i[negando negando= negando? seletor SELETOR =] end |
Detalhes do método de instância
#all(*criteria) ➤ Seleccionado Também conhecido como: all_in
Adicione o critério $all.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 36 def todos(*critério) se critério.vazio? Método clonar.toque fazer |Query| Query.reset_strategies! end end critério.injetar(clonar) fazer |Query, Condição| aumentar Errors::CriteriaArgumentRequired, :all se Condição.nada? Condição = (Condição) se estratégia enviar(estratégia, Condição, '$all') mais Condição.injetar(Query) fazer |_query, (Campo, valor)| v = { '$all' => valor } v = { '$not' => v } se negando? _query.add_field_expression(Campo.to_s, v) end end end.reset_strategies! end |
#e(*critérios) ➤ Seleccionado Também conhecido como: all_of
Adicione o critério $and.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 72 def e a(*critério) _mongoid_flatten_arrays(critério).injetar(clonar) fazer |C, new_s| new_s = new_s.seletor se new_s.is_a?(Seleccionado) Normalizado = (new_s) Normalizado.cada fazer |k, v| k = k.to_s se C.seletor[k] # Já existe uma condição em k. # Se v for um operador e todas as condições existentes forem # também operadores, e v não está presente nas condições existentes, # podemos adicionar às condições existentes. # Caso contrário, use $and. se v.is_a?(Hash) && v.Tamanho == 1 && (new_k = v.keys.primeiro).start_with?('$') && (exists_kv = C.seletor[k]).is_a?(Hash) && !exists_kv.chave?(new_k) && exists_kv.keys.todos? { |sub_k| sub_k.start_with?('$') } merged_v = C.seletor[k].mesclar(v) C.seletor.Armazenar(k, merged_v) mais C = C.enviar(:__multi__, [ { k => v } ], '$e') end mais C.seletor.Armazenar(k, v) end end C end end |
#any_of(*criteria) ⇒ Seleccionado
Adiciona uma disjunção dos argumentos como uma restrição adicional aos critérios já existentes no receptor.
Use or para tornar o receptor um dos operandos de disjunção.
Cada argumento pode ser um Hash, um objeto Critérios , uma array de objetos Hash ou Critérios ou uma array aninhada. As arrays agrupadas serão achatadas e podem ter qualquer profundidade. Passar arrays está obsoleto.
625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 625 def any_of(*critério) critério = _mongoid_flatten_arrays(critério) caso critério.Tamanho quando 0 clonar quando 1 # Quando temos um único critério, any_of se comporta como e. # Observação: os critérios podem ser um objeto Query , cujo método #where faz # não suporta. auto.e a(*critério) mais # Quando tivermos vários critérios, combine todos eles com $ou # e adicione o resultado a si mesmo. exprs = critério.map fazer |criterion| se criterion.is_a?(Seleccionado) (criterion.seletor) mais Hash[criterion.map fazer |k, v| se k.is_a?(Símbolo) [ k.to_s, v ] mais [ k, v ] end end] end end auto.e a('$or' => exprs) end end |
#entre(critério) ➤ Seleccionado
Adicione a seleção de intervalo.
115 116 117 118 119 120 121 122 123 124 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 115 def entre(criterion) aumentar Errors::CriteriaArgumentRequired, :entre se criterion.nada? seleção(criterion) fazer |seletor, Campo, valor| seletor.Armazenar( Campo, { '$gte' => valor.min, '$lte' => valor.max } ) end end |
#elem_match(critério) ⇒ Seleccionado
Selecione com um $elemMatch.
143 144 145 146 147 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 143 def elem_match(criterion) aumentar Errors::CriteriaArgumentRequired, :elem_match se criterion.nada? and_with_operator(criterion, '$elemMatch') end |
#eq(critério) ➤ Seleccionado
Adicione o critério $eq ao seletor.
240 241 242 243 244 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 240 def eq(criterion) aumentar Errors::CriteriaArgumentRequired, :eq se criterion.nada? and_with_operator(criterion, '$eq') end |
#exists(critério) ➤ Seleccionado
Adicione a seleção $exists.
164 165 166 167 168 169 170 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 164 def existe(criterion) aumentar Errors::CriteriaArgumentRequired, :exists se criterion.nada? typed_override(criterion, '$existe') fazer |valor| Mongoid::Boolean.evolua(valor) end end |
#expr_query(critério) ⇒ selecionável
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.
Adiciona a expressão especificada à query.
O critério deve ser um hash em uma das seguintes formas:
- valor
- => valor
- valor
- => operator_value_expression
O nome do campo e o operador podem ser fornecidos como strings ou símbolos.
795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 795 def expr_query(criterion) aumentar ArgumentError, 'O critério não pode ser nulo aqui' se criterion.nada? a menos que criterion.is_a?(Hash) aumentar Errors::Query inválida, "A expressão deve ser um Hash: #{Errors::InvalidQuery.truncate_expr(criteria)}" end Normalizado = (criterion) clonar.toque fazer |Query| Normalizado.cada fazer |Campo, valor| field_s = Campo.to_s se field_s.start_with?('$') # Operador de nível de expressão de query, como $and ou $where Query.add_operator_expression(field_s, valor) mais Query.add_field_expression(Campo, valor) end end Query.reset_strategies! end end |
#geo_spatial(criterion) ⇒ selecionável
As únicas formas de geometria válidas para um $geoIntersects são: :intersects_line, :intersects_point e :intersects_polygon.
As únicas opções válidas para uma query $geoWithin são a forma de geometria :within_polygon e o operador :within_box.
O operador :within_box para a query $geoWithin espera o par de coordenadas inferior esquerdo (sudoeste) como o primeiro argumento e o canto superior direito (nordeste) como o segundo argumento. Importante: quando a latitude e a longitude são passadas, a longitude é esperada como o primeiro elemento do par de coordenadas. Fonte: https://www.mongodb.com/pt-br/docs/manual/reference/operator/query/box/
Adicione uma seleção $geoIntersects ou $geoWithin. Os operadores de símbolos devem ser usados conforme mostrado nos exemplos para expandir os critérios.
209 210 211 212 213 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 209 def geo_spatial(criterion) aumentar Errors::CriteriaArgumentRequired, :geo_spatial se criterion.nada? __merge__(criterion) end |
#gt(critério) ⇒ Seleccionado
Adicione o critério $gt ao seletor.
258 259 260 261 262 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 258 def gt(criterion) aumentar Errors::CriteriaArgumentRequired, :gt se criterion.nada? and_with_operator(criterion, '$gt') end |
#gte(critério) ➤ Seleccionado
Adicione o critério $gte ao seletor.
276 277 278 279 280 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 276 def gte(criterion) aumentar Errors::CriteriaArgumentRequired, :gte se criterion.nada? and_with_operator(criterion, '$gte') end |
#em(condição) ➤ selecionável Também conhecido como: any_in
Adiciona a seleção $in ao selecionável.
297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 297 def Em(Condição) aumentar Errors::CriteriaArgumentRequired, :in se Condição.nada? Condição = (Condição) se estratégia enviar(estratégia, Condição, '$in') mais Condição.injetar(clonar) fazer |Query, (Campo, valor)| v = { '$in' => valor } v = { '$not' => v } se negando? Query.add_field_expression(Campo.to_s, v) end.reset_strategies! end end |
#js_query(criterion) ⇒ selecionável
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.
Crie uma seleção de javascript.
826 827 828 829 830 831 832 833 834 835 836 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 826 def js_query(criterion) clonar.toque fazer |Query| se negando? Query.add_operator_expression('$e', [ { '$nor' => [ { '$where' => criterion } ] } ]) mais Query.add_operator_expression('$where', criterion) end Query.reset_strategies! end end |
#lt(critério) ⇒ Seleccionado
Adicione o critério $lt ao seletor.
326 327 328 329 330 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 326 def lt(criterion) aumentar Errors::CriteriaArgumentRequired, :lt se criterion.nada? and_with_operator(criterion, '$lt') end |
#lte(critério) ⇒ Seleccionado
Adicione o critério $lte ao seletor.
344 345 346 347 348 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 344 def lte(criterion) aumentar Errors::CriteriaArgumentRequired, :lte se criterion.nada? and_with_operator(criterion, '$lte') end |
#max_istance(criterion) ⇒ selecionável
Adicione uma seleção $maxDistance ao selecionável.
359 360 361 362 363 364 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 359 def max_istance(criterion) aumentar Errors::CriteriaArgumentRequired, :max_istance se criterion.nada? # $maxDistance deve ser fornecido junto com $near __add__(criterion, '$maxDistance') end |
#mod(critério) ⇒ selecionável
Adiciona seleção $mod ao selecionável.
377 378 379 380 381 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 377 def mod(criterion) aumentar Errors::CriteriaArgumentRequired, :mod se criterion.nada? and_with_operator(criterion, '$mod') end |
#ne(critério) ➤ Seleccionado Também conhecido como: exclui
Adiciona $ne seleção ao selecionável.
395 396 397 398 399 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 395 def ne(criterion) aumentar Errors::CriteriaArgumentRequired, :ne se criterion.nada? and_with_operator(criterion, '$ne') end |
#próximo(critério) ➤ Seleccionado
Adiciona um critério $near a uma seleção geográfica.
414 415 416 417 418 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 414 def perto(criterion) aumentar Errors::CriteriaArgumentRequired, :perto se criterion.nada? and_with_operator(criterion, '$near') end |
#near_sphere(criterion) ⇒ selecionável
Adiciona um critério $nearSphere a uma seleção geográfica.
432 433 434 435 436 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 432 def near_sphere(criterion) aumentar Errors::CriteriaArgumentRequired, :near_sphere se criterion.nada? and_with_operator(criterion, '$nearSphere') end |
#negando? ➤ verdadeiro | false
O selecionável atual está negando a próxima seleção?
490 491 492 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 490 def negando? !!negando end |
#nin(condição) undício selecionável Também conhecido como: not_in
Adiciona a seleção $nin ao selecionável.
453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 453 def nin(Condição) aumentar Errors::CriteriaArgumentRequired, :nin se Condição.nada? Condição = (Condição) se estratégia enviar(estratégia, Condição, '$nin') mais Condição.injetar(clonar) fazer |Query, (Campo, valor)| v = { '$nin' => valor } v = { '$not' => v } se negando? Query.add_field_expression(Campo.to_s, v) end.reset_strategies! end end |
#none_of(*critérios) ➤ Selecionado
Negue os argumentos, restringindo a query apenas aos documentos que NÃO correspondem aos argumentos.
552 553 554 555 556 557 558 559 560 561 562 563 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 552 def none_of(*critério) critério = _mongoid_flatten_arrays(critério) Método dup se critério.vazio? exprs = critério.map fazer |criterion| ( criterion.is_a?(Seleccionado) ? criterion.seletor : criterion ) end auto.e a('$nor' => exprs) end |
#nor(*critérios) ➤ Seleccionado
Adiciona seleção $nor ao selecionável.
480 481 482 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 480 def nem(*critério) _mongoid_add_top_level_operation('$nor', critério) end |
#não(*critérios) ⇒ Seleccionado
Negue os argumentos ou a próxima seleção se nenhum argumento for fornecido.
509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 509 def não(*critério) se critério.vazio? dup.toque { |Query| Query.negando = !Query.negando } mais critério.compactar.injetar(clonar) fazer |C, new_s| new_s = new_s.seletor se new_s.is_a?(Seleccionado) (new_s).cada fazer |k, v| k = k.to_s se C.seletor[k] || k.start_with?('$') C = C.enviar(:__multi__, [ { '$nor' => [ { k => v } ] } ], '$e') elsif v.is_a?(Hash) C = C.enviar(:__multi__, [ { '$nor' => [ { k => v } ] } ], '$e') mais negated_operator = se v.is_a?(regexp) '$not' mais '$ne' end C = C.enviar(:__override__, { k => v }, negated_operator) end end C end end end |
#ou(*critérios) ⇒ Seleccionado
Cria uma disjunção usando $or a partir dos critérios existentes no receptor e dos argumentos fornecidos.
Esse comportamento (o receptor se tornando um dos operandos de disjunção) corresponde ao comportamento or do ActiveRecord.
Use any_of para adicionar uma disjunção dos argumentos como uma restrição adicional aos critérios já existentes no receptor.
Cada argumento pode ser um Hash, um objeto Critérios , uma array de objetos Hash ou Critérios ou uma array aninhada. As arrays agrupadas serão achatadas e podem ter qualquer profundidade. Passar arrays está obsoleto.
595 596 597 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 595 def ou(*critério) _mongoid_add_top_level_operation('$or', critério) end |
#text_search(termos, opts = nil) ➤ Seleccionado
Por https://www.mongodb.com/pt-br/docs/manual/reference/operator/query/text/ atualmente não é possível fornecer múltiplas condições de pesquisa de texto em uma query. O Mongoid construirá tal query, mas o servidor retornará um erro ao tentar executá-la.
Construa um seletor de texto do Atlas Search .
723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 723 def text_search(termos, opciona = nada) aumentar Errors::CriteriaArgumentRequired, :termos se termos.nada? clonar.toque fazer |Query| criterion = { '$text' => { '$search' => termos } } criterion['$text'].mesclar!(opciona) se opciona se Query.seletor['$text'] # Per https://www.mongodb.com/pt-br/docs/manual/reference/operator/query/text/ # múltiplas expressões $text não são atualmente suportadas por # Servidor MongoDB, mas construa a query corretamente em vez de # substituindo a condição de pesquisa de texto anterior pela atual # dado um. Mongoid.logger.AVISAR('Várias expressões de $text por query não são atualmente suportadas pelo servidor') Query.seletor = { '$e' => [ Query.seletor ] }.mesclar(criterion) mais Query.seletor = Query.seletor.mesclar(criterion) end end end |
#onde(*critérios) ➤ Seleccionado
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.
757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 757 def ONDE(*critério) Método clonar.reset_strategies! se critério.vazio? critério.injetar(auto) fazer |Query, criterion| aumentar Errors::CriteriaArgumentRequired, :where se criterion.nada? # Precisamos salvar o critério em uma variável de instância para que # Métodos modificáveis sabe como criar um objeto polimórfico . # Observe que este método, em princípio, aceita vários critérios, # mas apenas o primeiro será armazenado em @criterion. Isto # funciona bem porque first_or_create etc. # especifique sempre um critério para #onde. @criterion = criterion se criterion.is_a?(String) Query.js_query(criterion) mais Query.expr_query(criterion) end end end |
#with_size(critério) ⇒ Seleccionado
Este método é denominado #with_size para não entrar em conflito com nenhum método #size existente em enumeráveis ou símbolos.
Adicione uma seleção $size para campos de array.
669 670 671 672 673 674 675 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 669 def with_size(criterion) aumentar Errors::CriteriaArgumentRequired, :with_size se criterion.nada? typed_override(criterion, '$size') fazer |valor| ::Inteiro.evolua(valor) end end |
#with_type(critério) ➤ Seleccionado
http://vurl.me/PGOU contém uma lista de todos os tipos.
Adiciona uma seleção $type ao selecionável.
693 694 695 696 697 698 699 |
# Arquivo 'lib/mongoid/criteria/queryable/selectable.rb', linha 693 def with_type(criterion) aumentar Errors::CriteriaArgumentRequired, :with_type se criterion.nada? typed_override(criterion, '$type') fazer |valor| ::Inteiro.evolua(valor) end end |