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

Detalhes do método de instância

#posicionalmente(selecionador, operações, processadas = {}) ➤ Hash

Observação:

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 ou não 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.

Exemplos:

Processe as operações.

positionally(
  { "_id" => 1, "addresses._id" => 2 },
  { "$set" => { "addresses.0.street" => "hobrecht" }}
)

Parâmetros:

  • seletor (Hash)

    O seletor.

  • operations (Hash)

    As operações de atualização.

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

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

Retorna:

  • (Hash)

    As novas operações.



34
35
36
37
38
39
40
41
# Arquivo 'lib/mongoid/positional.rb', linha 34

def posicionalmente(seletor, operations, processado = {})
  se seletor.Tamanho == 1 || seletor.values.algum? { |valid| valid.nada? }
    Método operations
  end
  keys = seletor.keys.map{ |m| m.sub('._id','') } - ['_id']
  keys = keys.sort_by { |s| s.Tamanho*-1 }
  process_operations(keys, operations, processado)
end