
MongoDB Operators, Aggregation, Indexing, Search ve Validation
MongoDB, temel ekleme, bulma, güncelleme ve silme işlemlerinin ötesine geçtiğinizde güçlü hale gelir. Gerçek uygulamalar genellikle gelişmiş filtrelemeye, güvenli güncellemelere, raporlara, depolanan verileri koruyan collections, search performansı, indexes ve validation kuralları arasındaki joinse ihtiyaç duyar.
Bu makalede öğrenme yolunda gösterilen MongoDB konuları açıklanmaktadır: query operators, update operators, aggregation, $group, $limit, $project, $sort, $match, $addFields, $count gibi ortak aggregation aşamaları, $lookup ve $out, ardından indexing/search ve validation.
Amaç sadece sözdizimini ezberlemek değildir. Amaç, bu özelliklerin kontrol panelleri, yönetici panelleri, raporlama araçları, APIs, kataloglar, günlükler, analizler ve kullanıcı yönetimi sistemleri gibi gerçek backend sistemlerinde nasıl kullanıldığını anlamaktır.
MongoDB Sorgu Operatörleri
operators sorgusu, koşullara göre documents’ı filtrelemek için kullanılır. query operators, yalnızca tam eşitliğe göre arama yapmak yerine karşılaştırma, varoluş, dizi içerikleri, desen eşleştirme, mantıksal kurallar ve iç içe document değerlerine göre search aramanıza olanak tanır.
Basit bir sorgu doğrudan eşitliği kontrol eder:
db.users.find({ role: "admin" })Bu, rol alanı tam olarak admin'e eşit olan kullanıcıları döndürür. operators sorgusu bunu daha esnek hale getirir.
Karşılaştırma Operatörleri
Karşılaştırma operators, değerin belirli bir değerden büyük, küçük, birkaç değerden birine eşit olması veya belirli bir değere eşit olmaması gerektiğinde kullanılır.
$eq: bir değere eşit.
$ne: bir değere eşit değil.
$gt: bir değerden daha büyük.
$gte: bir değerden büyük veya ona eşit.
$lt: bir değerden küçük.
$lte: bir değerden küçük veya ona eşit.
$in: değer, izin verilen değerler listesinde bulunur.
$nin: değer bir listenin içinde mevcut değil.
db.products.find({
price: { $gte: 100, $lte: 500 }
})Bu sorgu, fiyatı 100 ile 500 arasında olan ürünleri döndürür. Bu, ürün filtrelerinde, rezervasyon sistemlerinde, kontrol panellerinde ve search sayfalarında yaygındır.
db.users.find({
role: { $in: ["admin", "editor"] }
})Bu sorgu, rolü yönetici veya editör olan kullanıcıları döndürür. $in operator, bir filtre birden fazla değeri kabul ettiğinde kullanışlıdır.
Mantıksal Operatörler
Mantıksal operators birden fazla koşulu birleştirir. Sorgu birden fazla kurala bağlı olduğunda bunlar önemlidir.
$and: tüm koşullar doğru olmalıdır.
$veya: En az bir koşul doğru olmalıdır.
$not: bir koşulu tersine çevirir.
$nor: Koşulların hiçbiri doğru olmamalıdır.
db.orders.find({
$or: [
{ status: "pending" },
{ status: "processing" }
]
})Bu sorgu, beklemedeki veya işlenmekte olan siparişleri döndürür.
db.products.find({
$and: [
{ price: { $gte: 100 } },
{ stock: { $gt: 0 } },
{ active: true }
]
})Bu sorgu, stokta bulunan ve fiyatı 100'den büyük veya buna eşit olan aktif ürünleri döndürür.
Eleman Operatörleri
operators öğesi, bir alanın mevcut olup olmadığını veya belirli bir BSON türüne sahip olup olmadığını kontrol eder.
$exists: document'da bir alanın mevcut olup olmadığını kontrol eder.
$type: Bir alanın veri tipini kontrol eder.
db.users.find({
phone: { $exists: true }
})Bu sorgu, telefon alanına sahip kullanıcıları döndürür. documents esnek olduğunda ve her document aynı alanlara sahip olmadığında kullanışlıdır.
Dizi Operatörleri
MongoDB genellikle documents içindeki dizilerle birlikte kullanılır. operators dizisi, dizilerin içinde depolanan değerlerin sorgulanmasına yardımcı olur.
$all: dizi belirtilen tüm değerleri içermelidir.
$size: dizi belirli sayıda öğe içermelidir.
$elemMatch: en az bir dizi öğesinin birden fazla koşulla eşleşmesi gerekir.
db.posts.find({
tags: { $all: ["mongodb", "backend"] }
})Bu, her iki etiketi de içeren gönderileri döndürür: mongodb ve backend.
db.products.find({
variants: {
$elemMatch: {
color: "black",
stock: { $gt: 0 }
}
}
})Bu, rengin siyah olduğu ve stokun sıfırdan büyük olduğu en az bir çeşidi olan ürünleri döndürür.
Normal İfade Sorguları
Desen eşleştirme için $regex operator kullanılır. Basit metin filtreleri için yararlı olabilir ancak büyük collections üzerinde dikkatli kullanılmalıdır çünkü verimsiz normal ifadeler yavaş olabilir.
db.users.find({
name: { $regex: "^ad", $options: "i" }
})Bu sorgu, adı "ad" ile başlayan kullanıcıları büyük/küçük harf dikkate alınmadan döndürür. Gelişmiş tam metin search için, search index veya özel search özelliği genellikle yalnızca normal ifadelere güvenmekten daha iyidir.
MongoDB Güncelleme Operatörleri
operators'yu güncelleyin document'nun tamamını değiştirmeden mevcut documents’ı değiştirin. Bu, bir document okumaktan, onu uygulama kodunda değiştirmekten ve tamamen geri yazmaktan daha güvenli ve daha verimlidir.
En yaygın güncelleme yapısı şuna benzer:
db.users.updateOne(
{ _id: ObjectId("64f000000000000000000001") },
{ $set: { name: "Adnan" } }
)İlk nesne filtredir. İkinci nesne güncelleme işlemini içerir.
$set
$set operator bir alan ekler veya mevcut bir alanın değerini değiştirir.
db.users.updateOne(
{ email: "adnan@example.com" },
{ $set: { name: "Adnan Mehrat", active: true } }
)Bu, bir kullanıcının adını ve aktif durumunu günceller.
$unset
$unset operator, document'dan bir alanı kaldırır.
db.users.updateOne(
{ email: "adnan@example.com" },
{ $unset: { temporaryToken: "" } }
)Bu, geçiciToken alanını eşleşen document kullanıcısından kaldırır.
$inc
$inc operator sayısal bir değeri artırır veya azaltır.
db.products.updateOne(
{ sku: "PRD-100" },
{ $inc: { stock: -1 } }
)Bu da ürün stoğunu bir oranında azaltır. Envanter sistemlerinde, sayaçlarda, istatistiklerde ve kullanım takibinde yaygındır.
$itme
$Push operator diziye bir değer ekler.
db.posts.updateOne(
{ slug: "mongodb-guide" },
{ $push: { tags: "database" } }
)Bu, tags dizisine yeni bir etiket ekler.
$addToSet
$addToSet operator, bir diziye yalnızca halihazırda mevcut değilse bir değer ekler.
db.posts.updateOne(
{ slug: "mongodb-guide" },
{ $addToSet: { tags: "mongodb" } }
)Bu, dizilerin içindeki yinelenen değerlerin önlenmesine yardımcı olur.
$çekme
$pull operator, eşleşen değerleri bir diziden kaldırır.
db.posts.updateOne(
{ slug: "mongodb-guide" },
{ $pull: { tags: "old-tag" } }
)Bu, old-tag değerini tags dizisinden kaldırır.
$yeniden adlandır
$rename operator bir alanı yeniden adlandırır.
db.users.updateMany(
{},
{ $rename: { "fullname": "fullName" } }
)Bu, veri temizleme sırasında veya alan adlandırma kuralı değiştiğinde kullanışlıdır.
$currentDate
$currentDate operator, bir alanı geçerli tarihe ayarlar.
db.users.updateOne(
{ email: "adnan@example.com" },
{ $currentDate: { updatedAt: true } }
)Bu genellikle updateAt gibi zaman damgaları için kullanılır.
MongoDB Toplamaları
Toplama, raporlama, analiz, gösterge tabloları, veri dönüşümü ve gelişmiş API yanıtları için en önemli MongoDB özelliklerinden biridir. documents’ı tam olarak depolandıkları gibi döndürmek yerine aggregation, documents’ı bir pipeline aracılığıyla işlemenize olanak tanır.
aggregation pipeline bir aşamalar dizisidir. Her aşama documents’ı alır, işler ve sonucu bir sonraki aşamaya aktarır.
db.orders.aggregate([
{ $match: { status: "paid" } },
{ $group: { _id: "$customerId", total: { $sum: "$amount" } } },
{ $sort: { total: -1 } }
])Bu pipeline, ücretli siparişleri filtreler, bunları müşteriye göre gruplandırır, toplam harcamayı hesaplar ve müşterileri toplam tutara göre sıralar.
MongoDB $eşleşme
$match aşaması, bir aggregation pipeline içindeki documents’ı filtreler. find() işlevinde kullanılan filtre nesnesine benzer şekilde çalışır.
db.orders.aggregate([
{ $match: { status: "paid" } }
])Bu, pipeline'da yalnızca ücretli siparişleri tutar.
Çoğu pipelines'da $match mümkün olduğu kadar erken yerleştirilmelidir. Erken filtreleme, sonraki aşamaların işlemesi gereken documents sayısını azaltır.
MongoDB $grup
$group aşaması, documents’ı seçilen bir alan veya ifadeye göre gruplandırır. Toplamlar, ortalamalar, sayımlar, minimumlar, maksimumlar ve gruplandırılmış raporlar için kullanılır.
db.orders.aggregate([
{
$group: {
_id: "$status",
totalOrders: { $sum: 1 },
totalRevenue: { $sum: "$amount" },
averageOrder: { $avg: "$amount" }
}
}
])Bu, siparişleri duruma göre gruplandırır ve her durum için sipariş sayısını, toplam geliri ve ortalama sipariş tutarını hesaplar.
$group içindeki _id alanı gruplandırma anahtarını tanımlar. $status'a göre gruplandırırsanız her durum bir grup haline gelir.
MongoDB $ sınırı
$limit aşaması, bir sonraki aşamaya geçirilen documents sayısını kısıtlar.
db.products.aggregate([
{ $sort: { price: -1 } },
{ $limit: 10 }
])Bu, azalan fiyatlara göre sıraladıktan sonra en pahalı 10 ürünü döndürür.
Sıralamada $limit kullanırken sıralamanın önemli olduğunu unutmayın. Sıralamadan önce sınırlandırırsanız yalnızca küçük bir alt kümeyi sıralarsınız. Sınırlamadan önce sıralama yaparsanız en iyi sonuçları alırsınız.
MongoDB $projesi
$proje aşaması çıktıda hangi alanların görüneceğini kontrol eder. Alanları içerebilir, alanları hariç tutabilir, değerleri yeniden adlandırabilir ve hesaplanan alanlar oluşturabilir.
db.users.aggregate([
{
$project: {
_id: 0,
name: 1,
email: 1,
role: 1
}
}
])Bu, _id değerini gizlerken yalnızca adı, e-postayı ve rolü döndürür.
db.orders.aggregate([
{
$project: {
customerId: 1,
amount: 1,
tax: { $multiply: ["$amount", 0.18] },
totalWithTax: { $multiply: ["$amount", 1.18] }
}
}
])Bu, vergi ve vergi dahil toplam tutar için hesaplanan alanlar oluşturur.
MongoDB $sıralama
$ sort aşaması documents siparişlerini verir. Artan sıralama için 1'i, azalan sıralama için -1'i kullanın.
db.orders.aggregate([
{ $sort: { createdAt: -1 } }
])Bu, önce en yeni siparişleri döndürür.
Büyük collections modellerinde sıralama pahalı olabilir. Dizinler, APIs ve yönetici kontrol panellerinde sık kullanılan alanlara göre sıralama yaparken önemlidir.
MongoDB $addFields
$addFields aşaması, mevcut alanları korurken documents'ya yeni alanlar ekler.
db.orders.aggregate([
{
$addFields: {
totalWithTax: { $multiply: ["$amount", 1.18] }
}
}
])Bu, diğer alanları kaldırmadan hesaplanmış bir totalWithTax alanı ekler.
$project ve $addFields arasındaki fark, $project'in genellikle çıktıyı şekillendirmek için kullanılması, $addFields'ın ise document yapısını korurken alanları eklemesi veya üzerine yazmasıdır.
MongoDB $sayımı
$count aşaması, pipeline'nun bu aşamasına kaç documents'nun ulaştığını sayar.
db.orders.aggregate([
{ $match: { status: "paid" } },
{ $count: "paidOrders" }
])Bu, ödenen siparişlerin sayısını döndürür.
Sonuç, ücretliOrders adlı bir alana sahip bir document'dur. Bu istatistikler, APIsayaçları, raporlar ve kontrol paneli kartları için kullanışlıdır.
MongoDB $arama
$lookup aşaması, collections arasında birleştirme benzeri bir işlem gerçekleştirir. MongoDB bir document database sistemidir, ancak gerçek sistemler bazen başka bir collection'dan ilgili verilere ihtiyaç duyar.
db.orders.aggregate([
{
$lookup: {
from: "users",
localField: "userId",
foreignField: "_id",
as: "user"
}
}
])Bu, siparişleri alır ve eşleşen kullanıcıları bir kullanıcı dizisine ekler.
$lookup faydalıdır ancak MongoDB’yi tam olarak ilişkisel bir database gibi tasarlamak için bir bahane olarak kullanılmamalıdır. Birçok MongoDB tasarımında, sık birleştirme ihtiyacını azaltmak için bazı veriler document'nun içine yerleştirilmiştir.
$lookup'tan sonra $unwind kullanımı
$lookup bir dizi döndürdüğü için $unwind genellikle her siparişin bir kullanıcı dizisi yerine tek bir kullanıcı nesnesine sahip olması gerektiğinde kullanılır.
db.orders.aggregate([
{
$lookup: {
from: "users",
localField: "userId",
foreignField: "_id",
as: "user"
}
},
{ $unwind: "$user" }
])Bu, kullanıcı dizisini her document sırası için normal birleştirilmiş nesneye dönüştürür.
MongoDB $çıkış
$out aşaması, bir aggregation pipeline sonucunu bir collection'ya yazar. Gerçekleştirilmiş raporlar, dönüştürülmüş veri kümeleri ve önceden hesaplanmış analitikler için yaygın olarak kullanılır.
db.orders.aggregate([
{ $match: { status: "paid" } },
{
$group: {
_id: "$userId",
totalSpent: { $sum: "$amount" },
ordersCount: { $sum: 1 }
}
},
{ $out: "customer_order_summary" }
])Bu, customer_order_summary adlı bir collection oluşturur veya aggregation sonucuyla değiştirir.
$out'u dikkatli kullanın. Verileri collection'ya yazar, bu nedenle normal salt okunur sorgu gibi değerlendirilmemelidir. Üretim sistemlerinde bu aşamanın nerede ve ne zaman gerçekleştirileceğinin kontrol edilmesi önemlidir.
Pratik Toplama Örneği
Aşağıdaki örnek küçük bir satış raporu oluşturur. Ücretli siparişleri filtreler, kullanıcıya göre gruplandırır, toplamları hesaplar, kullanıcı bilgilerini birleştirir, toplam harcamaya göre sıralar ve sonucu ilk 5 müşteriyle sınırlandırır.
db.orders.aggregate([
{ $match: { status: "paid" } },
{
$group: {
_id: "$userId",
totalSpent: { $sum: "$amount" },
orderCount: { $sum: 1 },
averageOrder: { $avg: "$amount" }
}
},
{
$lookup: {
from: "users",
localField: "_id",
foreignField: "_id",
as: "user"
}
},
{ $unwind: "$user" },
{
$project: {
_id: 0,
userId: "$_id",
name: "$user.name",
email: "$user.email",
totalSpent: 1,
orderCount: 1,
averageOrder: 1
}
},
{ $sort: { totalSpent: -1 } },
{ $limit: 5 }
])Bu tür pipeline, yönetici kontrol panellerinde ve APIs raporlamasında yaygındır. documents ham siparişini faydalı iş bilgilerine dönüştürür.
MongoDB İndeksleme ve Arama
Dizinler, MongoDB’nin collection’ın tamamını taramadan documents’ı bulmasına olanak tanıyarak sorgu performansını artırır. indexes olmadan, özellikle collection büyüdükçe, MongoDB’nin bir sorguyu yanıtlamak için birçok documents’ı incelemesi gerekebilir.
Temel bir index şu şekilde oluşturulabilir:
db.users.createIndex({ email: 1 })Bu, e-posta alanında artan bir index oluşturur.
Endeksler Neden Önemlidir?
Dizinler, filtrelerde, sıralamada ve joinsde sıklıkla kullanılan alanlar için önemlidir. Örnekler arasında e-posta, kullanıcı adı, bilgi, durum, createdAt, userId, ürünId,categorId ve sipariş durumu yer alır.
db.orders.createIndex({ userId: 1, createdAt: -1 })Bu index bileşiği, siparişleri kullanıcıya göre filtreleyen ve bunları oluşturulma tarihine göre sıralayan sorgulara yardımcı olabilir.
Benzersiz Dizinler
Benzersiz bir index, yinelenen değerleri önler.
db.users.createIndex({ email: 1 }, { unique: true })Bu, iki kullanıcının aynı e-posta adresine sahip olmamasını sağlar.
Metin Arama
MongoDB, search temel metni için indexes metnini kullanabilir.
db.posts.createIndex({ title: "text", content: "text" })db.posts.find({
$text: { $search: "mongodb aggregation" }
})Bu, verilen sözcükler için dizine alınmış metin alanlarında arama yapar. Sıralama, otomatik tamamlama, yazım hatası toleransı, alaka düzeyine göre filtreleme ve gelişmiş dil analizi gibi daha gelişmiş search davranışları için özel bir search çözümü daha uygun olabilir.
En İyi Dizin Oluşturma Uygulamaları
Dizinler rastgele değil, gerçek sorgu kalıplarına göre oluşturulmalıdır. Çok az sayıda indexes okumanın yavaşlamasına neden olabilir. Çok fazla indexes, yazma işlemlerini yavaşlatabilir ve depolama kullanımını artırabilir.
Filtrelerde sık kullanılan alanlar için indexes oluşturun.
Yaygın sıralama alanları için indexes oluşturun.
Sorgular birden fazla alana göre birlikte filtrelendiğinde indexes bileşiğini kullanın.
Benzersiz olması gereken alanlar için benzersiz indexes kullanın.
Optimizasyon gerektiğinde planları açıklayarak sorgu performansını inceleyin.
Hiçbir zaman gerçek sorgular tarafından kullanılmayan indexes oluşturmaktan kaçının.
MongoDB Doğrulaması
MongoDB varsayılan olarak esnektir ancak profesyonel uygulamaların yine de veri kurallarına ihtiyacı vardır. Doğrulama, documents'nun eklenmeden veya güncellenmeden önce beklenen yapıyı takip etmesini sağlamaya yardımcı olur.
Doğrulama, collection'yu eksik gerekli alanlardan, yanlış veri türlerinden, geçersiz değerlerden ve tutarsız document yapısından koruyabilir.
$jsonSchema ile Koleksiyon Doğrulaması
documents’ı doğrulamanın yaygın bir yolu $jsonSchema kullanmaktır.
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "email", "role"],
properties: {
name: {
bsonType: "string",
description: "Name must be a string and is required."
},
email: {
bsonType: "string",
description: "Email must be a string and is required."
},
role: {
enum: ["admin", "editor", "user"],
description: "Role must be admin, editor, or user."
},
age: {
bsonType: "int",
minimum: 0,
description: "Age must be a positive integer."
}
}
}
}
})Bu validation kuralı ad, e-posta adresi ve rol gerektirir. Ayrıca rol değerlerini yönetici, editör veya kullanıcıyla sınırlandırır.
Mevcut Bir Koleksiyona Doğrulama Ekleme
Mevcut bir collection'yu collMod kullanarak değiştirebilirsiniz.
db.runCommand({
collMod: "users",
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "email"],
properties: {
name: { bsonType: "string" },
email: { bsonType: "string" },
active: { bsonType: "bool" }
}
}
}
})Bu, validation kurallarını collection kullanıcılarına uygular.
Doğrulama Düzeyi ve Doğrulama Eylemi
Doğrulama davranışı validation düzeyi ve validation eylemi kullanılarak kontrol edilebilir.
validationLevel: validation'nun ne kadar sıkı uygulandığını kontrol eder.
validationAction: geçersiz documents'nun reddedilip reddedilmediğini veya yalnızca uyarıldığını kontrol eder.
db.runCommand({
collMod: "users",
validator: {
$jsonSchema: {
bsonType: "object",
required: ["email"],
properties: {
email: { bsonType: "string" }
}
}
},
validationLevel: "moderate",
validationAction: "error"
})Üretim uygulamalarında validation dikkatli bir şekilde tasarlanmalıdır. Uygulama düzeyi validation hala önemlidir, ancak database düzeyi validation ekstra bir koruma katmanı ekler.
Bu MongoDB Özellikleri Birlikte Nasıl Çalışır?
Gerçek backend geliştirmede query operators, update operators, aggregation, indexes ve validation birlikte kullanılır.
Örneğin, bir e-ticaret sistemi, ürünleri kategoriye ve fiyata göre filtrelemek için query operators'yu, satın almalardan sonra stoğu azaltmak için update operators'yu, satış raporları oluşturmak için aggregation pipelines'yu, search ürününü ve sipariş geçmişini hızlandırmak için indexes’i ve kullanıcıyı ve siparişi korumak için validation kurallarını kullanabilir. documents.
Bir blog sistemi, yayınlanan gönderileri bulmak için query operators'yu, görünümleri artırmak için update operators'yu, gönderileri kategoriye göre saymak için aggregation'yu, bilgi notu ve yayınlanmışAt'teki indexes’i ve başlık, bilgi, durum ve yazar kimliğini zorunlu kılmak için validation'yu kullanabilir.
Bir SaaS panosu, aylık etkinliği hesaplamak için aggregation pipelines'yu, müşteri bilgilerine katılmak için $lookup'ı, toplamları hesaplamak için $group'u, raporları hızlı tutmak için indexes’i ve kiracı verilerini tutarlı tutmak için validation'yu kullanabilir.
Kaçınılması Gereken Yaygın Hatalar
documents’ı düzgün bir şekilde tasarlamak yerine her yerde $lookup'ı kullanmak.
Büyük aggregation pipelines'yu $match kullanarak erken filtrelemeden çalıştırma.
Büyük collections'yu kullanışlı indexes olmadan sıralama.
Her search problemi için normal ifadelerin kullanılması.
Gerçek sorgu kullanımını kontrol etmeden çok fazla indexes oluşturuluyor.
update operators daha güvenli olduğunda document'nun tamamını değiştirerek documents'nun güncellenmesi.
Yalnızca validation uygulamasına güveniliyor ve database düzeyi validation göz ardı ediliyor.
Sonuçların collection'ya yazıldığını anlamadan $out'u kullanmak.
Önerilen Öğrenme Sırası
Bu konuları net bir şekilde öğrenmek için şu sırayı kullanın:
documents filtrelemek için query operators'yu öğrenin.
documents’ı güvenli bir şekilde değiştirmek için update operators'yu öğrenin.
aggregation pipeline temellerini inceleyin.
$match, $group, $project, $sort ve $limit alıştırmaları yapın.
$lookup'ı yalnızca document tasarımını anladıktan sonra öğrenin.
Oluşturulan collections ve raporlama çıktıları için $out'u dikkatli kullanın.
Uygulamanızın gerçekte çalıştırdığı sorguları temel alarak indexes’i inceleyin.
Önemli collections'yu korumak için validation kurallarını ekleyin.
Sonuç
MongoDB query operators, update operators, aggregation aşamaları, indexing, search ve validation, profesyonel database odaklı uygulamalar oluşturmak için gereklidir. Temel CRUD işlemleri yalnızca başlangıçtır. Gerçek uygulamaların anlamlı filtrelere, kontrollü güncellemelere, hızlı sorgulara, faydalı raporlara ve korunan veri yapılarına ihtiyacı vardır.
operators sorgusu doğru documents’ı bulmanıza yardımcı olur. operators güncellemesi, documents’ı güvenli bir şekilde değiştirmenize yardımcı olur. Toplama pipelines, ham verileri raporlara ve API'ya hazır çıktıya dönüştürür. Dizinler, veriler büyüdükçe sorguların hızlı kalmasını sağlar. Doğrulama, collections'yu tutarsız veya geçersiz documents'ya karşı korur.
Bu özellikler birlikte doğru şekilde kullanıldığında MongoDB, esnek bir document database'dan daha fazlası haline gelir. APIs, kontrol panelleri, analitikler, içerik sistemleri, e-ticaret platformları, SaaS uygulamaları ve modern web projeleri için güçlü bir backend veri katmanı haline gelir.
