Ambos son excelentes bibliotecas MongoDB para Ruby. Pero si desea cambiar, aquí hay algunas notas:
Migración de MongoMapper ORM a Mongoid ORM - Notas
-
Configure la conexión de la base de datos.
-
Reemplace el archivo de configuración yaml (incluye configuración de réplica).
-
Configure las opciones específicas de Mongoid. por ejemplo,
raise_not_found_error: false
. si no quiere un error cada vez que una consulta no arroja nada... -
Cambiar todas las definiciones de modelos -
include MongoMapper::Document
parainclude Mongoid::Document
-
Cambie el formato para todas las definiciones de campos.
-
En mongoid, debe especificar la marca de tiempo:
include Mongoid::Timestamps
-
Validación de cambios. por ejemplo:
:in => ARRAY
, será:validates :name, presence: true, inclusion: { in: ARRAY }
-
Cambiar índices.
-
Cambiar el formato order_by. por ejemplo:MM:
Model.all(:order => 'name')
. Mongoide:Model.order_by('name ASC')
-
Error
es una palabra clave en Mongoid. Entonces, si tiene un modelo llamadoError
, deberías cambiarlo. -
El formato de paginación es diferente, usando otra gema.
-
La entrada de índice de clave principal en MM es
id
. En Mongoid es_id
, si tiene otro código que se base en.id
en el objeto JSON, puede anular as_json función en su Modelo para crear la estructura JSON que desea. -
En MM,
Model.fields(:id, :name)
, limita los campos devueltos por la base de datos a los proporcionados al método. En Mongoid esModel.only(:name,:id)
-
Cambios en algunas consultas:
-
Selección de objetos por matriz:MM:
Model.where(:attr.in => [ ] )
yModel.where(:attr => [ ] )
. Mongoid es solo:Model.where(:attr.in => [ ] )
-
La opción de mapa de MM es equivalente al arranque de Mid.
Model.map(&:name)
--a--Model.pluck(:name)
-
Mongoid no admite consultas de búsqueda para nil. por ejemplo:
value = nil. Model.find(value)
arrojará un error:"Calling Document .find with nil is invalid"
. Así que en mongoid deberíamos hacer:Model.find(value || "")
. -
En MM:
Model.find_or_initialize_by_name("BOB")
. En MongoidModel.find_or_initialize_by(name: "BOB")
. -
MM se puede usar en esas dos opciones:
Model.where({:name => 'BOB'}).first
, y tambiénModel.first({:name => 'BOB'})
. Mongoid solo tiene la primera opción. -
En MM, para actualizar múltiples objetos:
Model.set({conditions},attr_to_update)
. En Mongoid:Model.where(conditions).update_all(attr_to_update)
.
-