Ambas são ótimas bibliotecas MongoDB para Ruby. Mas se você quiser mudar, aqui estão algumas notas:
Migrando MongoMapper ORM para Mongoid ORM - Notas
-
Configure a conexão com o banco de dados.
-
Substitua o arquivo yaml de configuração (inclui configuração de réplica).
-
Configure as opções específicas do Mongoid. por exemplo -raise_not_found_error: false
. se você não quiser um erro toda vez que uma consulta não retornar nada ...
-
Alterar todas as definições de modelos -include MongoMapper::Document
parainclude Mongoid::Document
-
Altere o formato de todas as definições de campos.
-
Em mongoid, você deve especificar o timestamp:include Mongoid::Timestamps
-
Validação de alterações. por exemplo::in => ARRAY
, será:validates :name, presence: true, inclusion: { in: ARRAY }
-
Alterar índices.
-
Altere o formato order_by. por exemplo:MM:Model.all(:order => 'name')
. Mongoide:Model.order_by('name ASC')
-
Error
é uma palavra-chave em Mongoid. Então, se você tem um modelo chamadoError
, você deve alterá-lo.
-
O formato de paginação é diferente, usando outra gema.
-
A entrada de índice de chave primária em MM éid
. No Mongoid é_id
, se você tiver outro código baseado em.id
no objeto JSON, você pode substituir as_json função em seu modelo para criar a estrutura JSON desejada.
-
No MM,Model.fields(:id, :name)
,limita os campos retornados do banco de dados àqueles fornecidos ao método. No Mongoid éModel.only(:name,:id)
-
Algumas consultas mudam:
-
Selecionando objetos por array:MM:Model.where(:attr.in => [ ] )
eModel.where(:attr => [ ] )
. Mongoid é apenas:Model.where(:attr.in => [ ] )
-
A opção de mapa do MM é equivalente à arrancada do Mid.Model.map(&:name)
--to--Model.pluck(:name)
-
O Mongoid não oferece suporte à consulta de localização para nil. por exemplo:value = nil. Model.find(value)
lançará um erro:"Calling Document .find with nil is invalid"
. Então no mongoid devemos fazer:Model.find(value || "")
.
-
No MM:Model.find_or_initialize_by_name("BOB")
. Em MongoidModel.find_or_initialize_by(name: "BOB")
.
-
MM pode ser usado nessas duas opções:Model.where({:name => 'BOB'}).first
, e tambémModel.first({:name => 'BOB'})
. Mongoid tem apenas a primeira opção.
-
No MM, para atualizar vários objetos:Model.set({conditions},attr_to_update)
. Em Mongoid:Model.where(conditions).update_all(attr_to_update)
.
-