Ich baue eine Rails-Anwendung mit MongoDB als Back-End und MongoMapper als ORM-Tool. Angenommen, in der Version 1, definiere ich folgendes Modell:MongoMapper und Migrationen
class SomeModel
include MongoMapper::Document
key :some_key, String
end
Später in Version 2, wird mir klar, dass ich einen neuen erforderlichen Schlüssel auf dem Modell benötigen. Also, in der Version 2, sieht SomeModel nun wie folgt aus:
class SomeModel
include MongoMapper::Document
key :some_key, String
key :some_new_key, String, :required => true
end
Wie kann ich wandern alle meine vorhandenen Daten some_new_key aufzunehmen? Angenommen, ich weiß, wie Sie einen vernünftigen Standardwert für alle vorhandenen Dokumente festlegen können. Nehmen wir noch einen Schritt weiter und nehmen an, dass ich in der Version 3 feststelle, dass ich some_key überhaupt nicht brauche. So, jetzt sieht das Modell wie dieses
class SomeModel
include MongoMapper::Document
key :some_new_key, String, :required => true
end
Aber alle vorhandenen Datensätze in der Datenbank Werte für some_key gesetzt haben, und es ist nur an dieser Stelle Platzverschwendung. Wie kann ich diesen Raum zurückgewinnen? Mit ActiveRecord hätte ich gerade Migrationen erstellt, um die Anfangswerte von some_new_key hinzuzufügen (in der Migration von Version1 -> Version2) und um die Werte für some_key zu löschen (in Version2 -> Version3 Migration).
Was ist der geeignete Weg, dies mit MongoDB/MongoMapper zu tun? Es scheint mir, dass eine Methode zum Verfolgen, welche Migrationen ausgeführt wurden, immer noch notwendig ist. Gibt es so etwas?
EDITED: Ich denke, die Leute vermissen den Punkt meiner Frage. Es kann vorkommen, dass Sie ein Skript in einer Datenbank ausführen möchten, um die darin enthaltenen Daten zu ändern oder neu zu strukturieren. Ich habe oben zwei Beispiele angeführt, von denen eines einen neuen erforderlichen Schlüssel hinzugefügt hat und eines, bei dem ein Schlüssel entfernt werden kann und Speicherplatz zurückgewonnen werden kann. Wie verwalten Sie die Ausführung dieser Skripts? Mit ActiveRecord-Migrationen können Sie diese Skripts auf einfache Weise ausführen und feststellen, welche Skripts bereits ausgeführt wurden und welche Skripts noch nicht ausgeführt wurden. Ich kann natürlich ein Mongo-Skript schreiben, das die Datenbank aktualisiert, aber ich suche nach einem Framework wie Migrationen, mit dem ich nachverfolgen kann, welche Upgrade-Skripts bereits ausgeführt wurden.
Ich denke Mongo (/ Mapper) könnte einfach zu jung für diese Art von Sache sein. :/ – Konklone
Migration in Bezug auf Schema ist eigentlich kein richtiges Konzept in Mongo DB, da Mongo DB tatsächlich kein Schema hat. Sie müssen nur das Datenmigrations-Skript selbst schreiben. – zsong