Beiden zijn geweldige MongoDB-bibliotheken voor Ruby. Maar als u wilt overschakelen, volgen hier enkele opmerkingen:
MongoMapper ORM migreren naar Mongoid ORM - Notes
-
Configureer de databaseverbinding.
-
Vervang configuratie yaml-bestand (inclusief replicaconfiguratie).
-
Configureer Mongoid-specifieke opties. bijv. -
raise_not_found_error: false
. als je niet elke keer een foutmelding wilt als een zoekopdracht niets oplevert... -
Wijzig alle modeldefinities -
include MongoMapper::Document
ominclude Mongoid::Document
-
Wijzig het formaat voor alle velddefinities.
-
In mongoid moet je het tijdstempel specificeren:
include Mongoid::Timestamps
-
Validatie wijzigen. bijv.:
:in => ARRAY
, zal zijn:validates :name, presence: true, inclusion: { in: ARRAY }
-
Indexen wijzigen.
-
Wijzig de indeling order_by. bijv.:MM:
Model.all(:order => 'name')
. Mongoïde:Model.order_by('name ASC')
-
Error
is een sleutelwoord in Mongoid. Dus als je een model hebt met de naamError
, moet je het veranderen. -
De pagineringsindeling is anders, met een ander juweeltje.
-
De primaire sleutelindexvermelding in MM is
id
. In Mongoid is het_id
, als je andere code hebt die vertrouwt op.id
in de object-JSON kunt u as_json functie in uw model om de gewenste JSON-structuur te creëren. -
In MM,
Model.fields(:id, :name)
, beperkt de velden die uit de database worden geretourneerd tot de velden die aan de methode worden geleverd. In Mongoid is hetModel.only(:name,:id)
-
Enkele wijzigingen in zoekopdrachten:
-
Objecten selecteren op array:MM:
Model.where(:attr.in => [ ] )
enModel.where(:attr => [ ] )
. Mongoid is alleen:Model.where(:attr.in => [ ] )
-
De kaartoptie van MM is gelijk aan de pluk van de Mid.
Model.map(&:name)
--to--Model.pluck(:name)
-
Mongoid ondersteunt geen zoekopdracht voor nul. bijv.:
value = nil. Model.find(value)
zal een foutmelding geven:"Calling Document .find with nil is invalid"
. Dus in mongoid zouden we moeten doen:Model.find(value || "")
. -
In MM:
Model.find_or_initialize_by_name("BOB")
. In MongoidModel.find_or_initialize_by(name: "BOB")
. -
MM kan in die twee opties worden gebruikt:
Model.where({:name => 'BOB'}).first
, en ookModel.first({:name => 'BOB'})
. Mongoid heeft alleen de eerste optie. -
In MM, om meerdere objecten bij te werken:
Model.set({conditions},attr_to_update)
. In Mongoid:Model.where(conditions).update_all(attr_to_update)
.
-