Tipps zur Migration von MongoMapper zu Mongoid?

8

Es scheint so, als ob Mongoid jetzt das überlegene ORM für Mongo ist, basierend auf Leistung und Entwicklungsaktivität. Leider sind wir auf MongoMapper und müssen migrieren.

Gibt es irgendwelche Bedenken oder Stolpersteine, die wir beachten sollten? Wir haben ein paar veraltete Artikel bei Google gefunden und versucht, Beiträge in den Mongoid Google Groups zu veröffentlichen (obwohl uns das verboten wurde), würden aber die Gedanken von SO-Mitgliedern, die dies in der Vergangenheit getan haben, lieben.

Wir sind auf Rails 3.2.12.

Danke!

    
Crashalot 30.12.2013, 23:11
quelle

1 Antwort

14

Beide sind großartige MongoDB-Bibliotheken für Ruby. Aber wenn Sie wechseln möchten, hier sind einige Hinweise:

Migrieren von MongoMapper ORM zu Mongoid ORM - Notizen

  • Konfigurieren Sie die Datenbankverbindung.

  • Konfigurations-YAML-Datei ersetzen (einschließlich Replikat-Konfiguration).

  • Mongoid-spezifische Optionen konfigurieren z. B. - raise_not_found_error: false . wenn Sie nicht jedesmal einen Fehler wünschen, wenn eine Abfrage nichts zurückgibt ...

  • Ändern Sie alle Modelldefinitionen - include MongoMapper::Document bis include Mongoid::Document

  • Ändern Sie das Format für alle Felddefinitionen.

  • In Mongoid sollten Sie den Zeitstempel angeben: include Mongoid::Timestamps

  • Validierung ändern Beispiel: :in => ARRAY , wird: validates :name, presence: true, inclusion: { in: ARRAY }

  • Indizes ändern.

  • Ändern Sie das Format order_by. Beispiel: MM: Model.all(:order => 'name') . Mongoid: Model.order_by('name ASC')

  • Error ist ein Schlüsselwort in Mongoid. Wenn Sie also ein Modell namens Error haben, sollten Sie es ändern.

  • Das Paginierungsformat ist anders und verwendet ein anderes Juwel.

  • Der Primärschlüssel-Indexeintrag in MM ist id . In Mongoid ist es _id . Wenn Sie anderen Code im Objekt JSON auf .id setzen, können Sie as_json Funktion in Ihrem Modell, um die gewünschte JSON-Struktur zu erstellen.

  • Begrenzt in MM, Model.fields(:id, :name) , die von der Datenbank zurückgegebenen Felder auf diejenigen, die an die Methode übergeben werden. In Mongoid ist es Model.only(:name,:id)

  • Einige Abfragen ändern sich:

    1. Auswählen von Objekten nach Array: MM: Model.where(:attr.in => [ ] ) und Model.where(:attr => [ ] ) . Mongoid ist nur: Model.where(:attr.in => [ ] )

    2. Die Map-Option von MM entspricht der Mid-Map. Model.map(&:name) - to-- Model.pluck(:name)

    3. Mongoid unterstützt keine Suchabfrage für nil. Beispiel: value = nil. Model.find(value) wird einen Fehler ausgeben: "Calling Document .find with nil is invalid" . Also sollten wir in Mongoid tun: Model.find(value || "") .

    4. In MM: Model.find_or_initialize_by_name("BOB") . In Mongoid Model.find_or_initialize_by(name: "BOB") .

    5. MM kann in diesen beiden Optionen verwendet werden: Model.where({:name => 'BOB'}).first und auch Model.first({:name => 'BOB'}) . Mongoid hat nur die erste Option.

    6. Um mehrere Objekte in MM zu aktualisieren: Model.set({conditions},attr_to_update) . In Mongoid: Model.where(conditions).update_all(attr_to_update) .

user2503775 06.01.2014, 10:12
quelle