Sto costruendo un'applicazione Rails usando MongoDB come back-end e MongoMapper come strumento ORM. Supponiamo che nella versione 1, definisco il seguente modello:MongoMapper e migrazioni
class SomeModel
include MongoMapper::Document
key :some_key, String
end
Più tardi nella versione 2, mi rendo conto che ho bisogno di una nuova chiave richieste sul modello. Così, nella versione 2, SomeModel ora assomiglia a questo:
class SomeModel
include MongoMapper::Document
key :some_key, String
key :some_new_key, String, :required => true
end
Come faccio a migrare tutti i miei dati esistenti per includere some_new_key? Supponiamo che io sappia come impostare un valore predefinito ragionevole per tutti i documenti esistenti. Facendo un ulteriore passo avanti, supponiamo che nella versione 3 mi rendo conto di non aver davvero bisogno di un po 'dikey. Così, ora il modello assomiglia a questo
class SomeModel
include MongoMapper::Document
key :some_new_key, String, :required => true
end
Ma tutti i record esistenti nel mio database hanno valori fissati per some_key, ed è solo spreco di spazio a questo punto. Come posso recuperare quello spazio?
Con ActiveRecord, avrei appena creato migrazioni per aggiungere i valori iniziali di some_new_key (nella versione1 -> migrazione versione2) e per eliminare i valori per some_key (nella versione2 -> migrazione versione3).
Qual è il modo appropriato per farlo con MongoDB/MongoMapper? Mi sembra che sia ancora necessario un metodo per tenere traccia delle migrazioni eseguite. Esiste una cosa del genere?
MODIFICATO: Penso che alla gente manchi il punto della mia domanda. Ci sono momenti in cui si desidera essere in grado di eseguire uno script su un database per modificare o ristrutturare i dati in esso contenuti. Ho fornito due esempi sopra, uno in cui è stata aggiunta una nuova chiave richiesta e una in cui una chiave può essere rimossa e lo spazio può essere recuperato. Come gestisci l'esecuzione di questi script? Le migrazioni ActiveRecord offrono un modo semplice per eseguire questi script e determinare quali script sono già stati eseguiti e quali script non sono stati eseguiti. Posso ovviamente scrivere uno script Mongo che esegue qualsiasi aggiornamento sul database, ma quello che sto cercando è un framework come le migrazioni che mi consente di tenere traccia di quali script di aggiornamento sono già stati eseguiti.
Penso che Mongo (/ Mapper) potrebbe essere troppo giovane per questo genere di cose. :/ – Konklone
La migrazione in termini di schema in realtà non è un concetto corretto in Mongo DB poiché in realtà il DB di Mongo non ha alcuno schema. Devi solo scrivere lo script di migrazione dei dati da solo. – zsong