Jeg "bør" nok indlede dette med en misforståelse i dit spørgsmål. Faktum er, at MongoDB adskiller sig fra traditionelle RDBMS ved, at det er "skemaløst", og du behøver faktisk slet ikke at "oprette felter". Så dette adskiller sig fra et "tabelskema", hvor du ikke kan gøre noget, før skemaet ændres. "Validation" er imidlertid en anden ting såvel som en "stadig" relativt ny funktion, når det skrives.
Hvis du vil "tilføje en valideringsregel" så er der metoder, som afhænger af samlingens aktuelle tilstand. I begge tilfælde er der faktisk ingen "tilføj til"-funktion, men handlingen er i stedet at "erstatte" alle valideringsreglerne med nye at specificere. Læs videre for reglerne for, hvordan dette fungerer.
Eksisterende dokumenter
Hvor samlingen har eksisterende dokumenter, som anført i dokumentationen
Eksisterende dokumenter
Du kan kontrollere, hvordan MongoDB håndterer eksisterende dokumenter ved hjælp af valideringsniveauet mulighed.
Som standard, validationLevel er streng og MongoDB anvender valideringsregler på alle inserts og opdateringer. Indstilling af valideringsniveau at moderere anvender valideringsregler på indstik og på opdateringer af eksisterende dokumenter, der opfylder valideringskriterierne. Med den moderate niveau, opdateringer til eksisterende dokumenter, der ikke opfylder valideringskriterierne, kontrolleres ikke for gyldighed.
Dette og følgende eksempelsektion siger grundlæggende, at ud over mulighederne på .createCollection()
du kan også ændre en eksisterende samling med dokumenter, men skal være "på vagt", at de nuværende dokumenter muligvis ikke opfylder de påkrævede regler. Brug derfor "moderat" hvis du er usikker, vil reglen blive opfyldt for alle dokumenter i samlingen.
For at ansøge bruger du .runCommand()
metode på nuværende tidspunkt til at udstede "kommandoen", som sætter valideringsreglerne. Hvilket er "validationLevel" fra passagen ovenfor.
Da du har eksisterende regler, kan vi bruge `.getCollectionInfos() til at hente dem og derefter tilføje den nye regel og anvende:
let validatior = db.getCollectionInfos({name: "MyTestCollection"})[0].options.validator;
validator.$or.push({ "LastLoginDate": { "$type": "date" } });
db.runCommand({
"collMod": "MyTestCollection",
"validator": validator,
"validationLevel": "moderate"
});
Selvfølgelig som nævnt før, at hvis du er sikker på, at alle dokumenterne opfylder betingelserne, kan du anvende "streng" som standard i stedet.
Tøm samling
Hvis i tilfældet er, at samlingen faktisk er "tom" uden dokumenter overhovedet eller du kan "drop" samlingen, da de aktuelle data ikke har betydning, så kan du blot variere ovenstående og bruge .createCollection()
i kombination med .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 });