sql >> Database >  >> NoSQL >> MongoDB

Nieuwe validator toevoegen aan bestaande collectie

Ik "zou" dit waarschijnlijk voorafgaan aan een misvatting in uw vraag. Het feit is dat MongoDB verschilt van traditioneel RDBMS doordat het "schemaloos" is en u in feite helemaal geen "velden" hoeft te maken. Dit verschilt dus van een "tabelschema" waar je niets kunt doen totdat het schema verandert. "Validatie" is echter iets anders, evenals een "nog" relatief nieuwe functie op het moment van schrijven.

Als u 'een validatieregel wilt toevoegen' dan zijn er methoden die afhankelijk zijn van de huidige staat van de collectie. In beide gevallen is er eigenlijk geen "toevoegen aan"-functie, maar de actie is om alles te "vervangen" de validatieregels met nieuwe om op te geven. Lees verder voor de regels hoe dit werkt.

Bestaande documenten

Waar de collectie bestaande documenten heeft, zoals vermeld in de documentatie

Bestaande documenten

U kunt bepalen hoe MongoDB omgaat met bestaande documenten met behulp van het validationLevel optie.

Standaard validationLevel is strikt en MongoDB past validatieregels toe op alle invoegingen en updates. validatieNiveau instellen tot matigen past validatieregels toe op invoegingen en op updates van bestaande documenten die aan de validatiecriteria voldoen. Met de gematigde niveau worden updates van bestaande documenten die niet aan de validatiecriteria voldoen niet gecontroleerd op geldigheid.

Deze en de volgende voorbeeldsectie zeggen in feite dat naast de opties op .createCollection() u mag ook een bestaande collectie met documenten wijzigen, maar moet "op uw hoede zijn" dat de huidige documenten mogelijk niet aan de vereiste regels voldoen. Gebruik daarom "gematigd" als je het niet zeker weet, wordt aan de regel voldaan voor alle documenten in de collectie.

Om te solliciteren, gebruik je de .runCommand() methode op dit moment om de "opdracht" uit te geven die de validatieregels bepaalt. Dat is "validationLevel" uit de bovenstaande passage.

Aangezien u bestaande regels heeft, kunnen we de `.getCollectionInfos() gebruiken om ze op te halen en vervolgens de nieuwe regel toevoegen en toepassen:

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

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

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

Natuurlijk, zoals eerder opgemerkt, dat als u er zeker van bent dat de documenten allemaal aan de voorwaarden voldoen, u "strikt" kunt toepassen in plaats daarvan als standaard.

Lege verzameling

Als in het geval is dat de collectie eigenlijk "leeg" is zonder documenten of u kunt de verzameling "laten vallen", aangezien de huidige gegevens niet van belang zijn, dan kunt u eenvoudig het bovenstaande variëren en .createCollection() gebruiken in combinatie met .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 });


  1. Mongoose - subdocumenten zoeken op criteria

  2. MongoDB $strcasecmp

  3. De strijd om de NoSQL-databases - MongoDB en de NoSQL-functies van MSSQL vergelijken

  4. Mongoose:krijg de volledige lijst met gebruikers