5 Stimmen

Verwaltung von Änderungen in der Klassenstruktur, um konsistent mit der MongoDB-Sammlung zu sein

Wir verwenden mongodb mit c#. Wir versuchen herauszufinden, wie wir unsere Sammlung nahtlos konsistent halten können. Im Moment muss ein Entwickler, wenn er Änderungen an der Klassenstruktur vornimmt (ein Feld hinzufügt oder den Datentyp ändert oder die Eigenschaft innerhalb einer verschachtelten Klasse ändert), die Mongo-Sammlung manuell ändern.

Es ist schmerzhaft, da unser Projekt wächst und die Entwickler, die an dem Projekt arbeiten, immer mehr werden. Ich frage mich, ob jemand bereits einen Weg gefunden hat, mit diesem Problem umzugehen.

  • Forschung
    1. Ich habe eine ähnliche Frage gefunden, aber keine Lösung gefunden.
    2. Ich habe einen Weg gefunden, um alle Eigenschaften zu finden Eigenschaften finden; jedoch werden Datentypen und verschachtelte Dokumente zu einem Problem.

0 Stimmen

Nicht sicher, ob ich verstehe: Dokumente in einer MongoDB-Sammlung können unterschiedlich sein, daher hindert dich nichts daran, neue Dokumente in eine bestehende Sammlung zu drücken, auch wenn die neuen Dokumente auf Instanzen aktualisierter Klassen basieren. Oder ist das Problem, dass du vorhandene Dokumente in der Datenbank patchen möchtest? Noch eine Sache: Liegt das Problem am Entwicklungssystem oder am Produktionssystem?

3 Stimmen

@ChristianHorsdal: Du hast recht. Es hindert uns nichts daran, neue Dokumente einzufügen. Wenn wir die Dokumente jedoch abrufen, wird der Serialisierer eine Ausnahme auslösen. Es gibt jedoch eine Lösung, wenn wir angeben, zusätzliche Elemente zu ignorieren oder zusätzliche Elemente in einem anderen BSON-Dokument zu sammeln. Dies kann im BSON-Serialisierer gemacht werden. Aber wir haben nach einem Art vorab erstellten Skript gesucht, das den Entwickler benachrichtigt, um die Änderungen vorzunehmen.

1voto

Ian Mercer Punkte 37031

Wenn Sie allmählich migrieren möchten, während auf Datensätze zugegriffen wird, müssen Sie ein paar einfache Regeln beachten:

1) Wenn Sie ein Feld hinzufügen, sollte es besser nullable sein oder einen Standardswert haben.

2) Benennen Sie niemals Felder um, ändern Sie niemals Feldtypen
- Fügen Sie stattdessen immer neue Felder hinzu, fügen Sie Migrationscode hinzu, entfernen Sie die alten Felder erst, wenn alle Dokumente migriert wurden.

Für das Prototyping mit MongoDB und C# habe ich ein dynamisches Wrapper entwickelt ... mit dem Sie Ihre Objekte nur mit Schnittstellen (keine Klassen erforderlich) und dynamisch neue Schnittstellen zu einem vorhandenen Objekt hinzufügen können. Nicht für den Produktiveinsatz bereit, aber für das Prototyping spart es viel Aufwand und erleichtert die Migration erheblich.

0 Stimmen

Dank dieser Antwort habe ich das BsonDefaultValueAttribute entdeckt, das für die obige Empfehlung unerlässlich ist!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X