Menu Docs

Página inicial do DocsMongoid

Mongoide 7.5

Nesta página

  • Suporte à Versão Ruby, JRuby e Rails
  • Resumo dos sinalizadores de recursos
  • Método Criteria#take/take! implementado
  • Forçar o método attributes a sempre retornar um Hash
  • Descontinuar :id_sort opção e suporte limit em #first/last
  • Combine operadores encadeados usando and em vez de override
  • Uso de pluck de map obsoleto
  • Mongoid::Criteria cache obsoleto
  • Array#update_values e Hash#update_values descontinuados
  • Document#to_a obsoleto
  • update_one Avisos em upsert

Esta página descreve alterações e melhorias significativas no Mongoid 7.5. A lista completa de versões está disponível no GitHub e no JIRA; consulte as versões do GitHub para obter notas de versão detalhadas e o JIRA para obter a lista completa de problemas corrigidos em cada versão, incluindo correções de bugs.

Mongoide 7.5 descontinua a compatibilidade com Ruby 2.5, JRuby 9.2 e Rails 5.1. O Mongoid 8 exigirá o Ruby 2.6 ou mais recente, JRuby 9.3 ou mais recente e Rails 5.2 ou mais recente.

Para garantir um caminho de atualização estável do Mongoid 7.4, mongoide 7.5 introduz sinalizadores de recursos que são explicados nas seções abaixo.

Para habilitar todos os novos comportamentos no Mongoid 7.5, use as seguintes opções de configuração em seu arquivo mongoid.yml. Recomendamos aplicativos recém-criados também para fazer isso.

development:
...
options:
# Enable all new behavior in Mongoid 7.5
legacy_attributes: false
overwrite_chained_operators: false

Além disso, consulte as notas de versão das versões anteriores do 7.x para sinalizadores de recursos introduzidos em cada versão. Para maior clareza, Mongoide 7.5 não altera o comportamento de nenhum sinalizador de recurso introduzido anteriormente.

Mongoide 7.5 introduz o método #take que retorna um documento ou um conjunto de documentos do banco de dados sem ordenar por _id:

class Band
include Mongoid::Document
end
Band.create!
Band.create!
Band.take
# => #<Band _id: 62c835813282a4470c07d530, >
Band.take(2)
# => [ #<Band _id: 62c835813282a4470c07d530, >, #<Band _id: 62c835823282a4470c07d531, > ]

Se um parâmetro for fornecido a #take, uma array de documentos será retornada. Se nenhum parâmetro for fornecido, um documento singular será retornado.

O método #take! funciona da mesma forma que chamar #take sem argumentos, mas gera um erro DocumentNotFound em vez de retornar nulo se nenhum documento for encontrado.

Band.take!
# => #<Band _id: 62c835813282a4470c07d530, >

Observe que os métodos #take/take! não aplicam uma classificação à visualização antes de recuperar os documentos do banco de dados e, portanto, eles podem retornar resultados diferentes dos métodos #first e #last . #take é equivalente a chamar #first ou #last com a opção { id_sort: :none } . Esta opção foi descontinuada no Mongoid 7.5 e é recomendável usar #take em vez disso. O suporte para a opção :id_sort será descartado no Mongoid 8.

Mongoide 7.5 com a opção Mongoid.legacy_attributes definida como false sempre retornará um Hash ao chamar o método attributes . Por exemplo:

class Band
include Mongoid::Document
field :name
end
band = Band.create!(name: "The Rolling Stones")
p band.attributes.class
# => Hash
band = Band.first
p band.attributes.class
# => Hash

Em mongoide 7.4 e anterior, e em 7.5 com a opção Mongoid.legacy_attributes definida como true, o método attributes em um documento retornará um BSON::Document ao recuperar esse documento do banco de dados, mas retornará um Hash ao instanciar um novo documento:

band = Band.create!(name: "The Rolling Stones")
p band.attributes.class
# => Hash
band = Band.first
p band.attributes.class
# => BSON::Document

Mongoide 7.5 substitui o argumento de palavra-chave :id_sort para os métodos Criteria#first e Criteria#last . Use Criteria#take para recuperar documentos sem classificar por ID.

Os métodos first e last agora usam o número de documentos para retornar como um argumento posicional, espelhando a funcionalidade do método Enumerable de Ruby e dos métodos first e last do ActiveRecord. Ambas as invocações (com limite como argumentos posicionais e com a opção :id_sort ) permanecem suportadas no Mongoid 7.x, mas a invocação :id_sort será removida no Mongoid 8.

Band.first
# => #<Band _id: 62c835813282a4470c07d530, >
Band.first(2)
# => [ #<Band _id: 62c835813282a4470c07d530, >, #<Band _id: 62c835823282a4470c07d531, > ]
Band.last
# => #<Band _id: 62c835823282a4470c07d531, >
Band.last(2)
# => [#<Band _id: 62c835813282a4470c07d530, >, #<Band _id: 62c835823282a4470c07d531, >]

Ao fornecer um limite, o #first/last retornará uma lista de documentos e, quando não fornecer um limite (ou fornecer nil), um único documento será retornado.

Observe que os métodos #first/last aplicam uma classificação em _id, o que pode causar problemas de desempenho. Para obter um documento sem classificar primeiro, use o método Critera#take .

Mongoide 7.5 com a opção Mongoid.overwrite_chained_operators definida como false combinará as condições que usam o mesmo operador e campo usando um and. Por exemplo, na seguinte consulta:

Band.ne(name: "The Rolling Stones").ne(name: "The Beatles")

Mongoide 7.5 com a opção Mongoid.overwrite_chained_operators definida como false gerará os seguintes critérios:

#<Mongoid::Criteria
selector: {"name"=>{"$ne"=>"The Rolling Stones"}, "$and"=>[{"name"=>{"$ne"=>"The Beatles"}}]}
options: {}
class: Band
embedded: false>

Em mongoide 7.4 e anterior, e em 7.5 com a opção Mongoid.overwrite_chained_operators definida como true, os seguintes critérios seriam gerados, o que substitui a primeira condição:

#<Mongoid::Criteria
selector: {"name"=>{"$ne"=>"The Beatles"}}
options: {}
class: Band
embedded: false>

As seguintes funções são afetadas por esta alteração:

  • eq

  • elem_match

  • gt

  • gte

  • lt

  • lte

  • mod

  • ne

  • near

  • near_sphere

Observação

Em mongoide 7.5 com a opção Mongoid.overwrite_chained_operators definida como false, as chaves aninhadas no seletor gerado serão sempre strings, enquanto no Mongoid 7.4 e anterior, e em 7.5 com a opção Mongoid.overwrite_chained_operators definida como true, as chaves aninhadas no seletor podem ser strings ou símbolos, dependendo do que foi passado para o operador.

Mongoide 7.5 deprecia o uso de map como pluck, como no exemplo a seguir:

Band.all.map(:name)
# Equivalent to:
Band.pluck(:name)

Esse uso não será mais suportado no Mongoid 8, que não aceitará argumentos para map.

A capacidade de armazenar em cache objetos de critérios individuais foi descontinuada no Mongoid 7.5 e será descartado no Mongoid 8.

Para obter a funcionalidade de cache, ative o Mongoid QueryCache. Consulte a seção QueryCache para obter mais detalhes.

Os métodos Array#update_values e Hash#update_values são preteridos no Mongoid 7.5. Recomenda-se usar o método transform_values! do ActiveSupport.

O método Document#to_a é preterido no Mongoid 7.5.

Mongoide 7.5 corrige o uso incorreto do método update_one do driver do método upsert do Mongoid. O upsert do Mongoid na verdade executa um upsert de substituição e o Mongoid 7.5 chama corretamente replace_one.

← Mongoide 8.0