MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Neuen Validator zu bestehender Sammlung hinzufügen

Ich "sollte" dem wahrscheinlich ein Missverständnis in Ihrer Frage voranstellen. Tatsache ist, dass sich MongoDB von herkömmlichem RDBMS dadurch unterscheidet, dass es „schemalos“ ist und Sie tatsächlich überhaupt keine „Felder erstellen“ müssen. Dies unterscheidet sich also von einem "Tabellenschema", bei dem Sie nichts tun können, bis sich das Schema ändert. "Validierung" ist jedoch eine andere Sache und ein "noch" relativ neues Feature zum Zeitpunkt des Schreibens.

Wenn Sie "eine Validierungsregel hinzufügen" möchten Dann gibt es Methoden, die vom aktuellen Stand der Sammlung abhängen. In beiden Fällen gibt es eigentlich keine "Hinzufügen zu"-Funktion, sondern die Aktion besteht darin, alle zu "ersetzen". die Validierungsregeln mit neuen zu spezifizieren. Lesen Sie weiter für die Regeln, wie dies funktioniert.

Vorhandene Dokumente

Wo die Sammlung über vorhandene Dokumente verfügt, wie in der Dokumentation vermerkt

Vorhandene Dokumente

Mit validationLevel können Sie steuern, wie MongoDB mit vorhandenen Dokumenten umgeht Option.

Standardmäßig validationLevel ist streng und MongoDB wendet Validierungsregeln auf alle Einfügungen und Aktualisierungen an. Einstellen von validationLevel bis moderat wendet Validierungsregeln auf Einfügungen und Aktualisierungen vorhandener Dokumente an, die die Validierungskriterien erfüllen. Mit dem moderaten Ebene werden Aktualisierungen bestehender Dokumente, die die Validierungskriterien nicht erfüllen, nicht auf Gültigkeit geprüft.

Dieser und der folgende Beispielabschnitt sagen das im Grunde zusätzlich zu den Optionen auf .createCollection() Sie können auch eine bestehende Sammlung mit Dokumenten modifizieren, sollten aber "vorsichtig" sein, dass die vorliegenden Dokumente möglicherweise nicht den erforderlichen Regeln entsprechen. Verwenden Sie daher "moderat" wenn Sie sich nicht sicher sind, wird die Regel für alle erfüllt Dokumente in der Sammlung.

Um sich zu bewerben, verwenden Sie den .runCommand() Methode, um den "Befehl" auszugeben, der die Validierungsregeln festlegt. Das ist "validationLevel" aus der Passage oben.

Da Sie bestehende Regeln haben, können wir sie mit `.getCollectionInfos() abrufen und dann die neue Regel hinzufügen und anwenden:

let validatior = db.getCollectionInfos({name: "MyTestCollection"})[0].options.validator;

validator.$or.push({ "LastLoginDate": { "$type": "date" } });

db.runCommand({
  "collMod": "MyTestCollection",
  "validator": validator,
  "validationLevel": "moderate"
});

Natürlich können Sie, wie bereits erwähnt, "streng" anwenden, wenn Sie sicher sind, dass alle Dokumente die Bedingungen erfüllen stattdessen als Standard.

Sammlung leeren

Wenn in dem Fall, dass die Sammlung tatsächlich "leer" ist und überhaupt keine Dokumente vorhanden sind oder Sie können die Sammlung "fallen lassen", da die aktuellen Daten nicht von Bedeutung sind, dann können Sie das obige einfach variieren und .createCollection() verwenden in Kombination mit .drop() :

let validatior = db.getCollectionInfos({name: "MyTestCollection"})[0].options.validator;

validator.$or.push({ "LastLoginDate": { "$type": "date" } });

db.getCollection("MyTestCollection").drop();

db.createCollection( "MyTestCollection", { "validator": validator });