Módulo: Mongoid::Posicional
- Incluído em:
- Associação::Embedded::Batchable, Contextual::Memory, Persistable
- Definido em:
- lib/mongoid/positional.rb
Visão geral
Esse módulo é responsável por receber seletores de atualização e alternar os índices para o operador posicional $ quando apropriado.
Recolhimento do Resumo do método de instância
-
#posicionalmente(selecionador, operações, processadas = {}) ➤ Hash
Aceita o seletor fornecido e as operações atômicas e substitui os índices dos documentos incorporados pelo operador posicional quando necessário.
Detalhes do método de instância
#posicionalmente(selecionador, operações, processadas = {}) ➤ Hash
O único momento em que podemos saber com precisão quando usar o operador posicional é no momento exato em que vamos persistir algo. Assim, podemos saber pelo seletor que estamos enviando se é realmente possível usar o operador posicional. Por exemplo, se o seletor for: { "_id" => 1 }, então não poderíamos usar o operador posicional para atualizar documentos incorporados, pois nunca haverá uma correspondência - baseamos se podemos com base no número de níveis de profundidade o seletor vai, e se os valores de id não forem nulos.
Aceita o seletor fornecido e as operações atômicas e substitui os índices dos documentos incorporados pelo operador posicional quando necessário.
31 32 33 34 35 36 37 |
# Arquivo 'lib/mongoid/positional.rb', linha 31 def posicionalmente(seletor, operations, processado = {}) Método operations se seletor.Tamanho == 1 || seletor.values.algum? { |valid| valid.nada? } keys = seletor.keys.map { |m| m.sub('._id', '') } - [ '_id' ] keys = keys.sort_by { |s| s.Tamanho * -1 } process_operations(keys, operations, processado) end |