Choć MongoDB jest domyślnie elastyczna, obsługuje walidację schematu na poziomie bazy danych — definiując reguły (wymagane pola, typy, ograniczenia wartości), które dokumenty muszą spełniać. To dodaje integralność danych w samej MongoDB (nie tylko w kodzie aplikacji), balansując elastyczność ze spójnością.
Definiowanie reguł walidacji
// add a JSON Schema validator when creating (or modifying) a collection
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "email"], // required fields
properties: {
name: { bsonType: "string" },
email: { bsonType: "string", pattern: "^.+@.+$" }, // type + pattern
age: { bsonType: "int", minimum: 0, maximum: 120 } // range
}
}
}
});
// → documents that don't satisfy this are REJECTED on insert/update
MongoDB używa JSON Schema do definiowania reguł walidacji — wymaganych pól, typów, wzorców, zakresów — egzekwowanych przez bazę danych podczas wstawiania lub aktualizacji dokumentów.
Poziomy walidacji i akcje
db.runCommand({
collMod: "users",
validator: { $jsonSchema: { ... } },
validationLevel: "moderate", // "strict" (all) or "moderate" (only valid existing docs)
validationAction: "error" // "error" (reject) or "warn" (log but allow)
});
validationLevel kontroluje, które dokumenty są sprawdzane; validationAction kontroluje, czy naruszenia powodują błąd (odrzucenie) czy tylko ostrzeżenie.
Dlaczego walidować w bazie danych (zamiast tylko w aplikacji)?
✓ DATABASE-LEVEL guarantee — enforced regardless of which app/code writes data
(multiple services, scripts, manual changes) → consistent data integrity
✓ A safety net even if application validation is bypassed or buggy
→ Similar reasoning to SQL constraints: the DB is the last line of defense for integrity.
Balansowanie elastyczności i struktury
MongoDB's flexibility is valuable, but UNCONTROLLED flexibility → inconsistent data.
Schema validation lets you add structure WHERE you need it:
→ enforce critical fields/types while keeping flexibility elsewhere
→ start flexible, add validation as the schema stabilizes
(Often validation is also/instead done in the app layer, e.g. via Mongoose schemas.)
Dlaczego to ważne
Zrozumienie walidacji schematu MongoDB jest cenne dla balansowania elastyczności MongoDB z integralością danych, dlatego jest to użyteczna wiedza do budowania niezawodnych aplikacji MongoDB.
Choć elastyczność bezschematowa MongoDB jest główną zaletą (pasując do ewoluujących i różnorodnych danych), niekontrolowana elastyczność może prowadzić do niespójnych danych (brakujące pola, błędne typy, nieprawidłowe wartości) — rzeczywisty problem dla jakości danych.
Walidacja schematu rozwiązuje to, pozwalając egzekwować reguły (wymagane pola, typy, wzorce, zakresy via JSON Schema) na poziomie bazy danych, więc dokumenty muszą je spełniać.
Kluczowa wartość walidacji na poziomie bazy danych (w przeciwieństwie do tylko walidacji aplikacji) polega na tym, że jest egzekwowana niezależnie od tego, która aplikacja, usługa, skrypt lub operacja ręczna zapisuje dane — zapewniając spójną gwarancję integralności i sieć bezpieczeństwa, nawet jeśli walidacja aplikacji zostanie pominięta lub zawiera błędy (ta sama przesłanka co ograniczenia SQL: baza danych jako ostatnia linia obrony).
Zrozumienie poziomów walidacji i akcji (kontrolowanie, które dokumenty są sprawdzane i czy naruszenia odrzucają czy ostrzegają) pozwala na elastyczną adopcję.
Co najważniejsze, zrozumienie jak balansować elastyczność i strukturę — dodając walidację gdzie spójność ma znaczenie, zachowując elastyczność gdzie indziej, często zaczynając elastycznie i dodając walidację w miarę ustabilizowania się schematu — odzwierciedla dojrzałe użytkownictwo MongoDB, które czerpie korzyści z elastyczności bez poświęcania krytycznej integralności danych.
Wiedza, że walidacja jest często również wykonywana w warstwie aplikacji (np. schematy Mongoose) jest również istotna.
Ponieważ integralność danych ma znaczenie nawet w elastycznych bazach danych, a MongoDB schema validation pozwala egzekwować strukturę tam, gdzie jest potrzebna (na poziomie bazy danych dla silnej gwarancji) zachowując elastyczność, zrozumienie walidacji schematu — jak to działa, korzyści egzekwowania na poziomie bazy danych i balansowanie elastyczności ze strukturą — jest cenną, praktycznie istotną wiedzą do budowania aplikacji MongoDB, które utrzymują jakość danych, użyteczną zdolność adresującą powszechny problem niespójnych danych w elastycznych bazach danych ze schematem.
