MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Consigli sulla migrazione da MongoMapper a Mongoid?

Entrambe sono ottime librerie MongoDB per Ruby. Ma se vuoi cambiare, ecco alcune note:

Migrazione di MongoMapper ORM a Mongoid ORM - Note

  • Configura la connessione al database.

  • Sostituisci il file yaml di configurazione (include la configurazione della replica).

  • Configura le opzioni specifiche di Mongoid. ad esempio - raise_not_found_error: false . se non vuoi un errore ogni volta che una query non restituisce nulla...

  • Modifica le definizioni di tutti i modelli - include MongoMapper::Document per include Mongoid::Document

  • Modifica il formato per tutte le definizioni dei campi.

  • In mongoid, dovresti specificare il timestamp:include Mongoid::Timestamps

  • Convalida del cambiamento. es::in => ARRAY , sarà:validates :name, presence: true, inclusion: { in: ARRAY }

  • Cambia indici.

  • Modifica il formato order_by. es:MM:Model.all(:order => 'name') . Mongoid:Model.order_by('name ASC')

  • Error è una parola chiave in mongoide. Quindi, se hai un modello chiamato Error , dovresti cambiarlo.

  • Il formato di impaginazione è diverso, utilizzando un'altra gemma.

  • La voce dell'indice della chiave primaria in MM è id . In Mongoid è _id , se hai altro codice che si basa su .id nell'oggetto JSON, puoi sovrascrivere as_json funzione nel tuo modello per creare la struttura JSON che desideri.

  • In MM, Model.fields(:id, :name) ,limita i campi restituiti dal database a quelli forniti al metodo. In Mongoid è Model.only(:name,:id)

  • Alcune modifiche alle query:

    1. Selezione di oggetti per array:MM:Model.where(:attr.in => [ ] ) e Model.where(:attr => [ ] ) . Mongoid è solo:Model.where(:attr.in => [ ] )

    2. L'opzione della mappa di MM è equivalente al coraggio del Mid. Model.map(&:name) --to-- Model.pluck(:name)

    3. Mongoid non supporta la query di ricerca per nil. es:value = nil. Model.find(value) genererà un errore:"Calling Document .find with nil is invalid" . Quindi in mongoid dovremmo fare:Model.find(value || "") .

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

    5. MM può essere utilizzato in queste due opzioni:Model.where({:name => 'BOB'}).first e anche Model.first({:name => 'BOB'}) . Mongoid ha solo la prima opzione.

    6. In MM, per aggiornare più oggetti:Model.set({conditions},attr_to_update) . In Mongoid:Model.where(conditions).update_all(attr_to_update) .