Obie są świetnymi bibliotekami MongoDB dla Rubiego. Ale jeśli chcesz się przełączyć, oto kilka uwag:
Migracja MongoMapper ORM do Mongoid ORM — uwagi
-
Skonfiguruj połączenie z bazą danych.
-
Zastąp plik konfiguracyjny yaml (zawiera konfigurację repliki).
-
Skonfiguruj opcje specyficzne dla Mongoid. np. -
raise_not_found_error: false
. jeśli nie chcesz, aby błąd pojawiał się za każdym razem, gdy zapytanie nic nie zwraca... -
Zmień wszystkie definicje modeli -
include MongoMapper::Document
abyinclude Mongoid::Document
-
Zmień format definicji wszystkich pól.
-
W mongoid należy podać znacznik czasu:
include Mongoid::Timestamps
-
Walidacja zmian. np.:
:in => ARRAY
, będzie:validates :name, presence: true, inclusion: { in: ARRAY }
-
Zmień indeksy.
-
Zmień kolejność_według formatu. np:MM:
Model.all(:order => 'name')
. Mongoid:Model.order_by('name ASC')
-
Error
to słowo kluczowe w języku Mongoid. Więc jeśli masz model o nazwieError
, powinieneś to zmienić. -
Format paginacji jest inny, używa innego klejnotu.
-
Wpis indeksu klucza podstawowego w MM to
id
. W Mongoidzie jest to_id
, jeśli masz inny kod oparty na.id
w obiekcie JSON możesz nadpisać as_json funkcji w modelu, aby utworzyć żądaną strukturę JSON. -
W MM,
Model.fields(:id, :name)
, ogranicza pola zwracane z bazy danych do tych dostarczonych do metody. W Mongoidzie jest toModel.only(:name,:id)
-
Niektóre zmiany w zapytaniach:
-
Wybór obiektów według tablicy:MM:
Model.where(:attr.in => [ ] )
iModel.where(:attr => [ ] )
. Mongoid to tylko:Model.where(:attr.in => [ ] )
-
Opcja mapy MM jest odpowiednikiem szarpnięcia środkowego.
Model.map(&:name)
--to--Model.pluck(:name)
-
Mongoid nie obsługuje kwerendy wyszukiwania dla wartości zero. np.:
value = nil. Model.find(value)
zgłosi błąd:"Calling Document .find with nil is invalid"
. Więc w mongoid powinniśmy zrobić:Model.find(value || "")
. -
W MM:
Model.find_or_initialize_by_name("BOB")
. W MongoidModel.find_or_initialize_by(name: "BOB")
. -
MM może być użyty w tych dwóch opcjach:
Model.where({:name => 'BOB'}).first
, a takżeModel.first({:name => 'BOB'})
. Mongoid ma tylko pierwszą opcję. -
W MM, aby zaktualizować wiele obiektów:
Model.set({conditions},attr_to_update)
. W Mongoid:Model.where(conditions).update_all(attr_to_update)
.
-