Tür, Zorunluluk ve Enum Kısıtlamaları
Öğrenenler, bir JSON Schema doğrulayıcısı içinde tür kısıtlamalarını, zorunlu alanları ve izin verilen numaralandırılmış değerleri tanımlayacaktır.
Tür, Zorunluluk ve Enum Kısıtlamaları, CoddyKit'te ücretsiz bir MongoDB Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, MongoDB Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. MongoDB Academy kursu toplamda 4 dersten oluşur.
Üç Temel Kısıt Türü
MongoDB JSON Schema doğrulayıcıları, gerçek dünyadaki doğrulama ihtiyaçlarının çoğunu karşılayan üç temel kısıt kategorisini destekler: bir alanın BSON veri türünü zorunlu kılan tür kısıtları, belirli alanların bulunmasını zorunlu tutan required kısıtları ve bir alanın değerini önceden tanımlanmış izin verilenler listesiyle sınırlayan enum kısıtları. Birlikte, her üretim şeması doğrulayıcısının temelini oluştururlar.
BSON Türleri ile JSON Schema Türleri
JSON Schema, string, number ve object gibi standart JSON türlerini kullanır. MongoDB bunu bsonType anahtar sözcüğüyle bildirilen BSON türleriyle genişletir; bunlara objectId, date, int, long, double ve decimal dahildir. Sayısal alt türler veya objectId ve date gibi MongoDB'ye özgü türler konusunda kesinlik gerektiğinde MongoDB doğrulayıcılarında her zaman bsonType kullanın (type değil).
// 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' }
}
}
}
});Zorunlu Alanları Bildirme
required anahtar sözcüğü, koleksiyona eklenen veya güncellenen her belgede bulunması gereken alan adlarından oluşan bir dizi alır. Zorunlu alanlardan biri eksikse yazma işlemi reddedilir. Zorunlu alanlar tek tek özellik tanımlarının içinde değil, şema düzeyinde bildirilir.
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 Kısıtları: İzin Verilen Değerleri Sınırlama
enum anahtar sözcüğü, bir alanı izin verilen sabit bir değer listesiyle sınırlar. Bu, durum alanları, kategori kodları veya kontrollü bir sözlükten alınması gereken herhangi bir alan için idealdir. Enum listesinde bulunmayan bir değeri eklemeye çalışmak, doğrulama hatasıyla birlikte yazma işleminin başarısız olmasına neden olur.
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'] }
}
}
}
});Sayısal Aralık Kısıtları
JSON Schema, sayısal alanlar için minimum, maximum, exclusiveMinimum ve exclusiveMaximum anahtar sözcüklerini sağlar. Bunlar, geçerli aralıkları zorunlu kılmak için bsonType ile birlikte çalışır; örneğin ürün fiyatının pozitif olmasını ve puanın 1 ile 5 arasında kalmasını sağlar.
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
}
}
}
}
});Dize Uzunluğu Kısıtları
Dize alanları, karakter sayısı sınırlarını zorunlu kılmak için minLength ve maxLength değerlerini destekler. Bir kullanıcı adının en az 3, en fazla 30 karakter olması gerekebilir. Bir açıklama alanı 2000 karakterle sınırlandırılabilir. Bu kısıtlar, yanlışlıkla boş dizelerin veya arayüz görüntüleme sınırlarını aşan ve kesilmiş metinlerin depolanmasını önler.
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
}
}
}
}
});Dizeler için Desen Kısıtları
pattern anahtar sözcüğü bir düzenli ifade dizesi alır ve alan değerinin bu ifadeyle eşleştiğini doğrular. Bu; e-posta biçimini, telefon numarası desenlerini, UUID biçimini veya kısa ad kurallarını zorunlu kılmak için yararlıdır. Arama için kullanılan düzenli ifade sorgularının aksine desen kısıtları yazma zamanında çalışır ve kurallara uymayan verilerin koleksiyona girmesini engeller.
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]+)*$'
}
}
}
}
});Tür ile Enum'u Birleştirme
Tür ve enum birlikte kullanılabilir. Hem bsonType hem de enum sağlamak, değerin doğru türde olmasını ve izin verilen küme içinde bulunmasını güvence altına alır. bsonType olmadan enum, eşleşen her türü kabul eder; JavaScript tür dönüştürmesi söz konusu olsaydı dize değerine eşit bir sayı da kabul edilebilirdi. Açık türler, doğrulama amacını netleştirir.
properties: {
role: {
bsonType: 'string',
enum: ['admin', 'editor', 'viewer'],
description: 'Must be a string and one of the allowed roles'
}
}Bilinmeyen Alanlara İzin Vermemek için additionalProperties
Varsayılan olarak MongoDB doğrulayıcıları, properties içinde belirtilmeyen ek alanlara izin verir. additionalProperties: false ayarı, belgelerin şemada bildirilmemiş alanlar içermesini önler. Bu, geliştirme sırasında alan adlarındaki yazım hatalarını yakalayabilen katı bir kip olsa da sık gelişen şemalar için fazla katı olabilir.
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' }
}
}
}
});Yararlı Hata Açıklamaları Sağlama
Her özellik tanımının içindeki description anahtar sözcüğü, istemciye döndürülen doğrulama hata iletisine eklenir. 'Email must be a valid address' veya 'Rating must be between 1 and 5' gibi açık ve insanların kolayca anlayabileceği açıklamalar yazmak, geliştiricilerin ve API tüketicilerinin şemayı okumadan doğrulama hatalarını anlamasını ve düzeltmesini çok kolaylaştırır.
Doğrulayıcınızı Test Etme
Bir doğrulayıcı ekledikten sonra, beklendiği gibi çalıştığını doğrulamak için doğrulayıcıyı her zaman hem geçerli hem de geçersiz belgelerle test edin. Zorunlu bir alanı eksik olan, yanlış türde bir alan içeren ve değeri enum dışında kalan bir alan içeren belgeler eklemeyi deneyin. Ayrıca kabul edildiğini doğrulamak için tamamen geçerli bir belge ekleyin. Bu iki yönlü test, geçerli yazma işlemlerini engelleyen aşırı katı doğrulayıcıların oluşmasını önler.
// 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');Hızlı Kontrol
Bu dersteki MongoDB ve NoSQL veritabanları kavramlarını ne kadar anladığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: bsonType, objectId ve date dahil olmak üzere BSON'a özgü veri türlerini zorunlu kılar, required, şema düzeyinde zorunlu alanları bildirir ve enum, bir alanı izin verilen sabit bir değer listesiyle sınırlar. Sırada, MongoDB'nin bu kuralları ne kadar katı uyguladığını denetlemek için doğrulama düzeylerini ve eylemlerini inceleyeceğiz.
Yapay zeka eğitmeniyle JavaScript öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 30
- Dersler
- 120
Sıkça Sorulan Sorular
“Tür, Zorunluluk ve Enum Kısıtlamaları” dersi ücretsiz mi?
Evet — “Tür, Zorunluluk ve Enum Kısıtlamaları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve MongoDB Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. MongoDB Academy kursu toplamda 4 dersten oluşur.
“Tür, Zorunluluk ve Enum Kısıtlamaları” dersinde ne öğreneceğim?
Öğrenenler, bir JSON Schema doğrulayıcısı içinde tür kısıtlamalarını, zorunlu alanları ve izin verilen numaralandırılmış değerleri tanımlayacaktır. MongoDB Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
MongoDB Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te MongoDB Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Tür, Zorunluluk ve Enum Kısıtlamaları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu MongoDB Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her MongoDB Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Bir Koleksiyona Doğrulayıcı Ekleme
- Tür, Zorunluluk ve Enum Kısıtlamaları
- Doğrulama Düzeyleri ve Eylemleri
- Kesinti Olmadan Şemaları Geliştirme