sql >> Databasteknik >  >> NoSQL >> MongoDB

Råd om migrering från MongoMapper till Mongoid?

Båda är fantastiska MongoDB-bibliotek för Ruby. Men om du vill byta, här är några anteckningar:

Migrera MongoMapper ORM till Mongoid ORM - Notes

  • Konfigurera databasanslutningen.

  • Ersätt yaml-konfigurationsfil (inkluderar replikkonfiguration).

  • Konfigurera Mongoid-specifika alternativ. t.ex. - raise_not_found_error: false . om du inte vill ha ett fel varje gång en fråga inte returnerar något...

  • Ändra alla modellers definitioner - include MongoMapper::Document att include Mongoid::Document

  • Ändra formatet för alla fältdefinitioner.

  • I mongoid bör du ange tidsstämpeln:include Mongoid::Timestamps

  • Ändra validering. t.ex.::in => ARRAY , kommer att vara:validates :name, presence: true, inclusion: { in: ARRAY }

  • Ändra index.

  • Ändra order_by format. t.ex.:MM:Model.all(:order => 'name') . Mongoid:Model.order_by('name ASC')

  • Error är ett nyckelord i Mongoid. Så om du har en modell som heter Error , bör du ändra det.

  • Pagineringsformatet är annorlunda, med en annan pärla.

  • Den primära nyckelindexposten i MM är id . I Mongoid är det _id , om du har annan kod som bygger på .id i objektet JSON kan du åsidosätta as_json a> funktion i din modell för att skapa den JSON-struktur du vill ha.

  • I MM, Model.fields(:id, :name) ,begränsar fälten som returneras från databasen till de som tillhandahålls till metoden. I Mongoid är det Model.only(:name,:id)

  • Vissa frågor ändras:

    1. Välja objekt efter array:MM:Model.where(:attr.in => [ ] ) och Model.where(:attr => [ ] ) . Mongoid är endast:Model.where(:attr.in => [ ] )

    2. Kartalternativet MM motsvarar mittens plockning. Model.map(&:name) --to-- Model.pluck(:name)

    3. Mongoid stöder inte sökfråga för noll. t.ex.:value = nil. Model.find(value) kommer att ge ett felmeddelande:"Calling Document .find with nil is invalid" . Så i mongoid bör vi göra:Model.find(value || "") .

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

    5. MM kan användas i dessa två alternativ:Model.where({:name => 'BOB'}).first , och även Model.first({:name => 'BOB'}) . Mongoid har bara första alternativet.

    6. I MM, för att uppdatera flera objekt:Model.set({conditions},attr_to_update) . I Mongoid:Model.where(conditions).update_all(attr_to_update) .




  1. Mongoose:Samlingen fylls inte i när den används som ref i ett annat dokument

  2. Apache Drill - Första starttiden är hög

  3. Beräknar genomsnittet för de senaste 200 dagarna i MongoDB-aggregation och NodeJS

  4. MongoDB $setOnInsert