MongoDB Academy · Oppitunti

Validointitasot ja -toiminnot

Määritätte validationLevel-asetuksen (strict tai moderate) ja validationAction-asetuksen (error tai warn) hallitaksenne rikkomusten käsittelyä.

Oppitunti 3/413 vaihetta

Validointitasot ja -toiminnot on ilmainen MongoDB Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu MongoDB Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. MongoDB Academy-kurssilla on yhteensä 4 oppituntia.

Validoinnin tiukkuuden hallinta

MongoDB tarjoaa kaksi toisistaan riippumatonta asetusta skeeman validoinnin säätämiseen: validationLevel määrittää, mihin dokumentteihin validointia sovelletaan, kun taas validationAction määrittää, mitä tapahtuu, kun dokumentti ei läpäise validointia. Yhdessä niiden avulla voit ottaa validoinnin käyttöön asteittain olemassa olevissa kokoelmissa rikkomatta nykyisiä tietoja tai sovelluksia.

validationLevel: strict

strict on oletusarvoinen validointitaso. Strict-tilassa jokaisen lisäyksen ja päivityksen on läpäistävä validaattori ilman poikkeuksia. Jos kokoelmassa oleva dokumentti rikkoo jo skeemaa, myös sen päivittäminen tarkistetaan validaattoria vasten. Strict-tila tarjoaa vahvimman takuun tietojen laadusta, mutta voi aiheuttaa häiriöitä kokoelmassa, joka sisältää vanhoja skeeman vastaisia dokumentteja.

db.runCommand({
  collMod: 'users',
  validator: { $jsonSchema: { /* ... */ } },
  validationLevel: 'strict'   // default — all inserts and updates must pass
});

validationLevel: moderate

moderate-taso käyttää validaattoria vain uusien dokumenttien lisäyksiin ja sellaisten dokumenttien päivityksiin, jotka läpäisevät validaattorin jo ennestään. Olemassa olevia skeeman vastaisia dokumentteja voidaan edelleen päivittää pakottamatta niitä noudattamaan skeemaa. Tämä on turvallinen siirtymäpolku: voit ottaa validaattorin käyttöön tuotannossa olevassa kokoelmassa rikkomatta vanhojen, uutta skeemaa vielä vastaamattomien dokumenttien päivityksiä.

db.runCommand({
  collMod: 'users',
  validator: { $jsonSchema: { /* ... */ } },
  validationLevel: 'moderate'  // existing non-conforming docs can still be updated
});

validationLevel: off

Asettamalla validationLevel-arvoksi off poistat validoinnin kokonaan käytöstä, vaikka kokoelmaan olisi liitetty validaattori. Tämä on hyödyllistä suurten tietomäärien siirtojen tai kiireellisten korjausten aikana, kun skeeman vastaisia tietoja on kirjoitettava tilapäisesti. Ota validointi aina uudelleen käyttöön siirtojakson päätyttyä.

// Temporarily disable validation for a migration window
db.runCommand({
  collMod: 'users',
  validationLevel: 'off'
});

// ... run migration ...

// Re-enable strict validation
db.runCommand({
  collMod: 'users',
  validationLevel: 'strict'
});

validationAction: error

error on oletusarvoinen validointitoiminto. Kun dokumentti ei läpäise validointia, MongoDB hylkää kirjoituksen kokonaan ja palauttaa asiakkaalle virheen. Dokumenttia ei kirjoiteta. Tämä on tuotannossa turvallisin asetus, koska se estää virheellisten tietojen päätymisen kokoelmaan.

db.runCommand({
  collMod: 'orders',
  validator: { $jsonSchema: { /* ... */ } },
  validationAction: 'error'   // default: reject the write, return an error
});

validationAction: warn

warn-toiminto sallii dokumentin kirjoittamisen, vaikka se ei läpäisisi validointia, mutta kirjaa varoituksen MongoDB-palvelimen lokiin. Tämä on hyödyllistä siirtymävaiheessa, kun haluat selvittää rikkomusten määrän estämättä olemassa olevaa sovellusliikennettä. Kun olet tarkastellut lokit ja korjannut ongelmalliset tapaukset, voit vaihtaa toiminnoksi error.

db.runCommand({
  collMod: 'legacy_collection',
  validator: { $jsonSchema: { /* ... */ } },
  validationAction: 'warn'   // write succeeds, violation logged to server log
});

// The server log will show:
// [conn1] Document failed validation: { ... } with schema: { ... }

Tason ja toiminnon yhdistäminen

Nämä kaksi asetusta toimivat toisistaan riippumatta. Yleinen siirtymästrategia on aloittaa asetuksilla validationLevel: 'moderate' ja validationAction: 'warn' — uusien dokumenttien on noudatettava sääntöjä, mutta rikkomukset kirjataan lokiin, eikä vanhoihin dokumentteihin puututa. Kun olet seurannut varoituksia ja täydentänyt vanhat tiedot, vaihda asetuksiksi strict + error täyden valvonnan käyttöönottamiseksi.

// Phase 1: observe without blocking
db.runCommand({
  collMod: 'users',
  validator: { $jsonSchema: { bsonType: 'object', required: ['email'] } },
  validationLevel: 'moderate',
  validationAction: 'warn'
});

// Phase 2 (after backfill): full enforcement
db.runCommand({
  collMod: 'users',
  validationLevel: 'strict',
  validationAction: 'error'
});

Validointiasetusten tarkasteleminen

Tarkista kokoelman nykyiset validointiasetukset komennolla db.getCollectionInfos(). Vastaus sisältää kentät options.validationLevel ja options.validationAction sekä koko validaattoridokumentin. Tämä on hyödyllistä, kun tarkastat kaikki tietokannan kokoelmat ja varmistat, että tuotantokokoelmissa on käytössä strict-tason valvonta.

const info = db.getCollectionInfos({ name: 'users' });
const opts = info[0].options;
console.log('level:', opts.validationLevel);
console.log('action:', opts.validationAction);
console.log('validator:', JSON.stringify(opts.validator, null, 2));

Validoinnin ohittaminen bypassDocumentValidation-asetuksella

Tietyt tietokantaoperaatiot tukevat asetusta bypassDocumentValidation: true, joka ohittaa validaattorin kyseisen kirjoituksen ajaksi. Vain käyttäjät, joilla on bypassDocumentValidation-käyttöoikeus, voivat käyttää tätä asetusta. Se on tarkoitettu ainoastaan luotetuille ylläpitoskripteille ja tietojen siirroille — älä koskaan käytä sitä sovelluskoodissa, koska silloin validaattorin tarkoitus vesittyy.

// Insert a document bypassing validation — admin/migration use only
db.users.insertOne(
  { name: 'LegacyUser' },  // missing required email
  { bypassDocumentValidation: true }
);

Validointivaroitukset palvelimen lokissa

Kun validationAction on warn, jokainen epäonnistunut validointi kirjoitetaan MongoDB-palvelimen lokiin komponentilla WRITE ja vakavuustasolla WARNING. Lokirivi sisältää tietokannan, kokoelman, sääntöä rikkoneen dokumentin _id-arvon sekä rikotun skeemasäännön. Voit seurata näitä lokeja Atlasin lokikatselimella tai seuraamalla mongod.log-tiedostoa itse ylläpidetyissä ympäristöissä.

Käytännön siirtosuunnitelma

Tässä on suositeltu nelivaiheinen suunnitelma validoinnin lisäämiseksi olemassa olevaan tuotantokokoelmaan:

  • Vaihe 1: Aseta moderate + warn — ei vaikutuksia, tarkkaile rikkomuksia
  • Vaihe 2: Korjaa sovelluskoodi lähettämään skeeman mukaisia dokumentteja
  • Vaihe 3: Täydennä vanhat skeeman vastaiset dokumentit siirtoskriptillä
  • Vaihe 4: Vaihda asetuksiksi strict + error — täysi valvonta

Pikatarkistus

Testaa, miten hyvin ymmärrät tämän oppitunnin MongoDB- ja NoSQL-tietokantoihin liittyvät käsitteet.

Oppitunnin yhteenveto

Tässä oppitunnissa opit, että validationLevel (strict/moderate/off) määrittää, mitkä dokumentit validoidaan, validationAction (error/warn) määrittää, estävätkö virheet kirjoituksen vai kirjataanko ne vain lokiin ja moderate + warn on turvallisin tapa ottaa validointi käyttöön käytössä olevassa kokoelmassa. Seuraavaksi opit, miten skeemoja voi kehittää ilman käyttökatkoa käynnissä olevassa MongoDB-klusterissa.

Aloita maksutta

Opi JavaScript tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”Validointitasot ja -toiminnot” ilmainen?

Kyllä – oppitunnin ”Validointitasot ja -toiminnot” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko MongoDB Academy-kurssin, päivitä CoddyKit PROhon. MongoDB Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Validointitasot ja -toiminnot”?

Määritätte validationLevel-asetuksen (strict tai moderate) ja validationAction-asetuksen (error tai warn) hallitaksenne rikkomusten käsittelyä. Harjoittelet MongoDB Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni MongoDB Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin MongoDB Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Validointitasot ja -toiminnot”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä MongoDB Academy-oppitunnilla?

Kyllä. Jokainen MongoDB Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Validaattorin lisääminen kokoelmaan
  2. Type-, Required- ja Enum-rajoitteet
  3. Validointitasot ja -toiminnot
  4. Skeemojen kehittäminen ilman käyttökatkoa
← Takaisin: MongoDB Academy