sql >> Databáze >  >> NoSQL >> MongoDB

Rady ohledně migrace z MongoMapper na Mongoid?

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ázvem Error , 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 to Model.only(:name,:id)

  • Některé změny dotazů:

    1. Výběr objektů podle pole:MM:Model.where(:attr.in => [ ] ) a Model.where(:attr => [ ] ) . Mongoid je pouze:Model.where(:attr.in => [ ] )

    2. Možnost mapy MM je ekvivalentní k vytržení středu. Model.map(&:name) --to-- Model.pluck(:name)

    3. 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 || "") .

    4. V MM:Model.find_or_initialize_by_name("BOB") . V Mongoidu Model.find_or_initialize_by(name: "BOB") .

    5. 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.

    6. V MM pro aktualizaci více objektů:Model.set({conditions},attr_to_update) . V Mongoidu:Model.where(conditions).update_all(attr_to_update) .




  1. Poddokument pro aktualizaci ovladače MongoDB Java

  2. Výsledky dotazů projekce Mongo se liší od testování v aplikaci shell vs nodejs

  3. Použití .sort s PyMongem

  4. Duplikování funkcí okna PostgreSQL, jako je lag, lead, over