MongoDB Academy · Oppitunti

Type-, Required- ja Enum-rajoitteet

Määritätte tyyppirajoituksia, pakollisia kenttiä ja sallitut arvot luettelevia rajoitteita JSON Schema -validaattorissa.

Oppitunti 2/413 vaihetta

Type-, Required- ja Enum-rajoitteet on ilmainen MongoDB Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.

Kolme keskeistä rajoitetyyppiä

MongoDB:n JSON Schema -validaattorit tukevat kolmea perustavanlaatuista rajoiteluokkaa, jotka kattavat suurimman osan käytännön validointitarpeista: tyyppirajoitteet varmistavat kentän BSON-tietotyypin, required-rajoitteet edellyttävät tiettyjen kenttien olemassaoloa ja enum-rajoitteet rajoittavat kentän arvon ennalta määritettyyn sallittujen arvojen luetteloon. Yhdessä ne muodostavat tuotantokäyttöön tarkoitetun skeemavalidaattorin perustan.

BSON-tyypit ja JSON Schema -tyypit

JSON Schema käyttää tavallisia JSON-tyyppejä, kuten string, number ja object. MongoDB laajentaa tätä BSON-tyypeillä, jotka ilmoitetaan bsonType-avainsanalla. Näitä ovat esimerkiksi objectId, date, int, long, double ja decimal. Käytä MongoDB:n validaattoreissa aina bsonType-avainta (type-avaimen sijaan), kun tarvitset tarkkuutta numeeristen alatyyppien tai MongoDB-kohtaisten tyyppien, kuten objectId ja date, käsittelyssä.

// BSON type names to use in validators
// 'string', 'bool', 'int', 'long', 'double', 'decimal',
// 'objectId', 'date', 'array', 'object', 'null', 'binData'

db.createCollection('products', {
  validator: {
    $jsonSchema: {
      bsonType: 'object',
      properties: {
        _id:       { bsonType: 'objectId' },
        price:     { bsonType: 'decimal' },
        stock:     { bsonType: 'int' },
        isActive:  { bsonType: 'bool' },
        createdAt: { bsonType: 'date' }
      }
    }
  }
});

Pakollisten kenttien määrittäminen

required-avainsana ottaa vastaan taulukon kenttien nimiä, joiden on oltava mukana jokaisessa kokoelmaan lisättävässä tai päivitettävässä dokumentissa. Jos jokin pakollinen kenttä puuttuu, kirjoitusoperaatio hylätään. Pakolliset kentät määritetään skeematasolla, ei yksittäisten ominaisuuksien määrittelyjen sisällä.

db.createCollection('employees', {
  validator: {
    $jsonSchema: {
      bsonType: 'object',
      required: ['firstName', 'lastName', 'email', 'hiredAt'],
      properties: {
        firstName: { bsonType: 'string' },
        lastName:  { bsonType: 'string' },
        email:     { bsonType: 'string' },
        hiredAt:   { bsonType: 'date' },
        salary:    { bsonType: 'decimal' }  // optional
      }
    }
  }
});

Enum-rajoitteet: sallittujen arvojen rajoittaminen

enum-avainsana rajoittaa kentän kiinteään sallittujen arvojen luetteloon. Tämä sopii erinomaisesti tilakentille, kategoriakoodeille ja kaikille kentille, joiden arvon on oltava peräisin hallitusta sanastosta. Enum-luettelon ulkopuolisen arvon lisääminen aiheuttaa kirjoitusoperaation epäonnistumisen validointivirheen vuoksi.

db.createCollection('tickets', {
  validator: {
    $jsonSchema: {
      bsonType: 'object',
      required: ['title', 'status', 'priority'],
      properties: {
        title:    { bsonType: 'string' },
        status:   { enum: ['open', 'in_progress', 'resolved', 'closed'] },
        priority: { enum: ['low', 'medium', 'high', 'critical'] }
      }
    }
  }
});

Numeeristen arvojen vaihteluvälirajoitteet

Numeerisille kentille JSON Schema tarjoaa avainsanat minimum, maximum, exclusiveMinimum ja exclusiveMaximum. Ne toimivat yhdessä bsonType-avaimen kanssa kelvollisten vaihteluvälien varmistamiseksi – esimerkiksi tuotteen hinnan positiivisuuden ja arvosanan sijoittumisen välille 1–5.

db.createCollection('reviews', {
  validator: {
    $jsonSchema: {
      bsonType: 'object',
      required: ['productId', 'rating'],
      properties: {
        productId: { bsonType: 'objectId' },
        rating: {
          bsonType: 'int',
          minimum: 1,
          maximum: 5,
          description: 'Rating must be between 1 and 5'
        },
        price: {
          bsonType: 'decimal',
          minimum: 0,
          exclusiveMinimum: true
        }
      }
    }
  }
});

Merkkijonojen pituusrajoitteet

Merkkijonokentille voi määrittää merkkimäärän rajat avaimilla minLength ja maxLength. Käyttäjänimen on ehkä oltava vähintään 3 ja enintään 30 merkkiä pitkä. Kuvauskentän enimmäispituus voi olla 2 000 merkkiä. Näillä rajoitteilla estetään tyhjien merkkijonojen tai käyttöliittymän näyttörajoitukset ylittävän katkaistun tekstin tallentaminen vahingossa.

db.createCollection('profiles', {
  validator: {
    $jsonSchema: {
      bsonType: 'object',
      required: ['username'],
      properties: {
        username: {
          bsonType: 'string',
          minLength: 3,
          maxLength: 30,
          description: 'Username must be 3-30 characters'
        },
        bio: {
          bsonType: 'string',
          maxLength: 500
        }
      }
    }
  }
});

Merkkijonojen pattern-rajoitteet

pattern-avainsana ottaa vastaan säännöllisen lausekkeen merkkijonona ja tarkistaa, vastaako kentän arvo sitä. Tämä on hyödyllistä sähköpostiosoitteiden, puhelinnumeroiden, UUID-tunnisteiden ja slugien muodon varmistamisessa. Hakuihin käytettävistä regex-kyselyistä poiketen pattern-rajoitteet suoritetaan kirjoitushetkellä, jotta virheelliset tiedot eivät päädy kokoelmaan.

db.runCommand({
  collMod: 'users',
  validator: {
    $jsonSchema: {
      bsonType: 'object',
      required: ['email'],
      properties: {
        email: {
          bsonType: 'string',
          pattern: '^[a-zA-Z0-9._%+\\-]+@[a-zA-Z0-9.\\-]+\\.[a-zA-Z]{2,}$',
          description: 'Must be a valid email address'
        },
        slug: {
          bsonType: 'string',
          pattern: '^[a-z0-9]+(?:-[a-z0-9]+)*$'
        }
      }
    }
  }
});

Typen ja enumin yhdistäminen

Tyypin ja enum-rajoitteen voi yhdistää. Kun ilmoitat sekä bsonType- että enum-avaimen, varmistat, että arvo on oikeantyyppinen ja kuuluu sallittuun joukkoon. Ilman bsonType-avainta enum hyväksyy minkä tahansa tyypin, joka täsmää – mukaan lukien merkkijonoarvoa vastaavan numeron, jos JavaScriptin tyyppimuunnos olisi mukana. Eksplisiittiset tyypit tekevät validoinnin tarkoituksesta selkeän.

properties: {
  role: {
    bsonType: 'string',
    enum: ['admin', 'editor', 'viewer'],
    description: 'Must be a string and one of the allowed roles'
  }
}

additionalProperties tuntemattomien kenttien estämiseen

Oletusarvoisesti MongoDB:n validaattorit sallivat kaikki ylimääräiset kentät, joita ei ole mainittu properties-avaimessa. Asetus additionalProperties: false estää dokumentteja sisältämästä skeemassa määrittelemättömiä kenttiä. Tämä on tiukka tila, joka voi havaita kenttänimien kirjoitusvirheitä kehityksen aikana, mutta se voi olla liian jäykkä usein muuttuville skeemoille.

db.createCollection('strictUsers', {
  validator: {
    $jsonSchema: {
      bsonType: 'object',
      required: ['name', 'email'],
      additionalProperties: false,  // reject any undeclared fields
      properties: {
        _id:   { bsonType: 'objectId' },
        name:  { bsonType: 'string' },
        email: { bsonType: 'string' }
      }
    }
  }
});

Hyödyllisten virhekuvausten tarjoaminen

Kunkin ominaisuuden määrittelyssä oleva description-avainsana sisällytetään asiakkaalle palautettavaan validointivirheilmoitukseen. Selkeät, ihmiselle ymmärrettävät kuvaukset, kuten 'Email must be a valid address' tai 'Rating must be between 1 and 5', helpottavat huomattavasti validointivirheiden ymmärtämistä ja korjaamista ilman, että kehittäjän tai rajapinnan käyttäjän täytyy lukea skeemaa.

Validaattorin testaaminen

Kun olet lisännyt validaattorin, testaa se aina sekä kelvollisilla että virheellisillä dokumenteilla varmistaaksesi, että se toimii odotetulla tavalla. Kokeile lisätä dokumentti, josta puuttuu pakollinen kenttä, dokumentti, jossa kentän tyyppi on väärä, sekä dokumentti, jonka kentän arvo ei kuulu enum-luetteloon. Lisää myös täysin kelvollinen dokumentti varmistaaksesi, että se hyväksytään. Tällainen kaksipuolinen testaus estää liian tiukat validaattorit, jotka estävät kelvolliset kirjoitukset.

// Should FAIL — missing required 'email'
try { db.users.insertOne({ name: 'Bob' }); } catch(e) { console.log('Correctly rejected:', e.code); }

// Should FAIL — wrong type for 'age'
try { db.users.insertOne({ name: 'Bob', email: 'b@b.com', age: 'thirty' }); } catch(e) { console.log('Correctly rejected'); }

// Should PASS
db.users.insertOne({ name: 'Bob', email: 'b@b.com', age: 30 });
console.log('Valid document accepted');

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ä bsonType määrittää BSON-kohtaiset tietotyypit, kuten objectId:n ja daten, required määrittää pakolliset kentät skeematasolla ja enum rajoittaa kentän arvot kiinteään sallittujen arvojen luetteloon. Seuraavaksi tutustumme validointitasoihin ja -toimintoihin, joiden avulla voit hallita, kuinka tiukasti MongoDB valvoo näitä sääntöjä.

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 ”Type-, Required- ja Enum-rajoitteet” ilmainen?

Kyllä – oppitunnin ”Type-, Required- ja Enum-rajoitteet” 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 ”Type-, Required- ja Enum-rajoitteet”?

Määritätte tyyppirajoituksia, pakollisia kenttiä ja sallitut arvot luettelevia rajoitteita JSON Schema -validaattorissa. 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 2/4.

Kuinka kauan ”Type-, Required- ja Enum-rajoitteet”-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