Örnek sorular
Mongodb AggregationZorluk 1
MongoDB'de aggregation pipeline nedir?
- a
find()'ı tamamen yerine geçen tek bir sorgu operatörü - bHer stage'in çıktısının bir sonraki stage'in girdisi olduğu, sıralı bir stage dizisi✓
- cDaha hızlı okuma için index'leri önceden hesaplayan bir arka plan thread'i
- dİstemci tarafında çalıştırılan, JavaScript ile yazılmış bir stored procedure
Açıklama:Aggregation pipeline, aggregate()'e verilen bir stage dizisidir (ör. $match, $group, $project); document'lar sırayla stage'lerden geçer, her stage bir öncekinin çıktısını dönüştürür. find()'ın yerine geçmez (a) — basit sorgular için find() hâlâ vardır —, index kuran bir thread değildir (c) ve stored procedure değildir (d).
Mongodb AggregationZorluk 1
Aggregation pipeline'da $match stage'i ne yapar?
- aDocument'ları filtreler; yalnızca verilen koşula uyanlar bir sonraki stage'e geçer✓
- bDocument'taki her alanı verilen hedef isme yeniden adlandırır
- cMevcut collection'ı paylaşılan bir alana göre başka bir collection ile birleştirir (join)
- dDocument'ları bir key'e göre gruplar ve grup başına accumulator hesaplar
Açıklama:$match, girdi document'larını sorgu benzeri kriterlerle filtreler; yalnızca eşleşenler pipeline'da devam eder — kavramsal olarak bir WHERE koşuluna ya da find()'ın sorgu argümanına benzer. Alan yeniden adlandırma $project/$addFields'ın işidir (b), join $lookup'ındır (c), gruplama $group'undur (d).
Mongodb AggregationZorluk 2
db.orders.aggregate([
{ $group: { _id: "$status", total: { $sum: "$amount" } } }
])
$group içindeki
_id alanı neyi kontrol eder?
- aİsteğe bağlı bir metadata'dır,
$group stage'inden çıkarılabilir - bHer zaman her document'in orijinal MongoDB
_id alanına işaret eder - cGruplama key'ini tanımlar — burada, her farklı
status değeri için bir çıktı document'ı✓ - dGruplanmış sonuçların saklanacağı çıktı collection'ının adını belirler
Açıklama:$group'un _id ifadesi zorunludur ve document'ların neye göre gruplanacağını tanımlar — burada "$status", her farklı status değeri için hesaplanmış total'ı taşıyan bir sonuç document'ı demektir. Zorunludur, isteğe bağlı değildir (a); document'in orijinal _id'sine referans vermek zorunda değildir (b) ve $group tek başına bir collection'a yazmaz — bu $out/$merge'ün işidir (d).
Mongodb AggregationZorluk 1
$project stage'inin temel amacı nedir?
- aAlttaki collection'da diskteki istenmeyen alanları kalıcı olarak silmek
- bStage'de listelenen alanlar üzerinde yeni bir index oluşturmak
- cBoolean bir koşulu sağlamayan document'ları filtrelemek
- dDocument'ları yeniden şekillendirmek — çıktı için alan dahil etmek, hariç tutmak ya da hesaplamak✓
Açıklama:$project her document'i yeniden şekillendirir: mevcut alanları dahil edebilir, hariç tutabilir, yeniden adlandırabilir ya da ifadelerden yeni alanlar hesaplayabilir — bunların hepsi yalnızca pipeline çıktısı içindir. Diskteki saklanan collection'ı asla değiştirmez (a), index oluşturmaz (b, bu createIndex'in işi) ve document filtrelemek $match'in işidir (c).
Mongodb AggregationZorluk 2
{ $group: { _id: "$customerId", orderCount: { $sum: 1 } } }
Burada
{ $sum: 1 } neyi hesaplar?
- aDocument içinde herhangi bir yerde bulunan tüm sayısal alanların toplamı
- bHer grup için document sayısı, çünkü
1 her document için bir kez eklenir✓ - cHer müşteri için, tam sayı olarak ifade edilen ortalama sipariş tutarı
- dGruplanan müşteri document'ları arasında görülen en yüksek
_id değeri
Açıklama:{ $sum: 1 }, bir gruba düşen her document için 1 sabit değerini ekler; bu, grup başına document sayma için standart bir deyimdir — COUNT(*) ... GROUP BY'ın karşılığıdır. Keyfi sayısal alanları toplamaz (a), ortalama değildir (c, bu $avg'ın işi) ve _id büyüklüğüyle ilgisi yoktur (d).
Mongodb AggregationZorluk 1
$unwind stage'i, array alanı olan bir document'a ne yapar?
- aArray'i açar (deconstruct eder); array'in her elemanı için ayrı bir document üretir✓
- bArray'in elemanlarını yerinde artan sırada sıralar
- cArray alanını her document'tan tamamen kaldırır
- dArray'i virgülle ayrılmış tek bir string alanında birleştirir
Açıklama:$unwind, array alanı olan bir document'ı alır ve o array'in her elemanı için, alanın tek bir elemanla değiştirildiği ayrı bir document üretir — array içeriğine göre gruplamadan/filtrelemeden önce faydalıdır. Yerinde sıralama yapmaz (b), alanı silmez (c) ve array'i string'e çevirmez (d).