Oba jsou skvělé knihovny MongoDB pro Ruby. Ale pokud chcete přepnout, zde je několik poznámek:
Migrace MongoMapper ORM na Mongoid ORM – Poznámky
-
Nakonfigurujte připojení k databázi.
-
Nahradit konfigurační soubor yaml (zahrnuje konfiguraci repliky).
-
Nakonfigurujte specifické možnosti Mongoidu. např. -
raise_not_found_error: false
. pokud nechcete, aby se při každém dotazu nic nevrátilo... -
Změnit definice všech modelů -
include MongoMapper::Document
include Mongoid::Document
-
Změňte formát pro všechny definice polí.
-
V mongoidu byste měli zadat časové razítko:
include Mongoid::Timestamps
-
Ověření změny. např.:
:in => ARRAY
, bude:validates :name, presence: true, inclusion: { in: ARRAY }
-
Změňte indexy.
-
Změňte formát order_by. např.:MM:
Model.all(:order => 'name')
. Mongoid:Model.order_by('name ASC')
-
Error
je klíčové slovo v Mongoidu. Pokud tedy máte model s názvemError
, měli byste to změnit. -
Formát stránkování je jiný, používá jiný drahokam.
-
Položka indexu primárního klíče v MM je
id
. V Mongoidu je to_id
, pokud máte jiný kód spoléhající na.id
v objektu JSON můžete přepsat as_json ve vašem modelu vytvořte požadovanou strukturu JSON. -
V MM
Model.fields(:id, :name)
,omezuje pole vrácená z databáze na pole dodaná do metody. V Mongoidu je toModel.only(:name,:id)
-
Některé změny dotazů:
-
Výběr objektů podle pole:MM:
Model.where(:attr.in => [ ] )
aModel.where(:attr => [ ] )
. Mongoid je pouze:Model.where(:attr.in => [ ] )
-
Možnost mapy MM je ekvivalentní k vytržení středu.
Model.map(&:name)
--to--Model.pluck(:name)
-
Mongoid nepodporuje vyhledávací dotaz pro nulu. např.:
value = nil. Model.find(value)
vyvolá chybu:"Calling Document .find with nil is invalid"
. Takže v mongoidu bychom měli udělat:Model.find(value || "")
. -
V MM:
Model.find_or_initialize_by_name("BOB")
. V MongoiduModel.find_or_initialize_by(name: "BOB")
. -
MM lze použít v těchto dvou možnostech:
Model.where({:name => 'BOB'}).first
a takéModel.first({:name => 'BOB'})
. Mongoid má pouze první možnost. -
V MM pro aktualizaci více objektů:
Model.set({conditions},attr_to_update)
. V Mongoidu:Model.where(conditions).update_all(attr_to_update)
.
-