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::Documentabyinclude 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') -
Errorto 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.idw 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).
-