Página inicial do Docs → Mongoid
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 umHash
- Descontinuar
:id_sort
opção e suportelimit
em#first/last
- Combine operadores encadeados usando
and
em vez deoverride
- Uso de
pluck
demap
obsoleto Mongoid::Criteria
cache obsoletoArray#update_values
eHash#update_values
descontinuadosDocument#to_a
obsoletoupdate_one
Avisos emupsert
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.
Suporte à Versão Ruby, JRuby e Rails
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.
Resumo dos sinalizadores de recursos
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.
Método Criteria#take/take!
implementado
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.
Forçar o método attributes
a sempre retornar um Hash
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
Descontinuar a opção :id_sort
e oferecer suporte limit
em #first/last
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
.
Combine operadores encadeados usando and
em vez de override
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.
pluck
Uso de map
obsoleto
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
.
Mongoid::Criteria
cache obsoleto
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.
Array#update_values
e Hash#update_values
obsoleto
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.
Document#to_a
obsoleto
O método Document#to_a
é preterido no Mongoid 7.5.
update_one
Avisos em upsert
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
.