Veritabanı Tetikleyicileri: CRUD Olaylarına Tepki Verme
Öğrenenler, ekleme veya güncelleme olaylarında çalışan ve verileri eşitlemek ya da bildirim göndermek için bir Atlas Function çalıştıran veritabanı tetikleyicisi oluşturacaklardır.
Veritabanı Tetikleyicileri: CRUD Olaylarına Tepki Verme, CoddyKit'te ücretsiz bir MongoDB Academy dersidir. Bu, 4 dersinin 1. 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.
Atlas Veritabanı Tetikleyicileri Nedir?
Atlas Veritabanı Tetikleyicileri, bir koleksiyonda belirli bir CRUD olayı (ekleme, güncelleme, değiştirme, silme) gerçekleştiğinde bir Atlas Function'ı otomatik olarak çalıştıran sunucusuz olay işleyicileridir. MongoDB Change Streams üzerine kuruludurlar ve olay odaklı iş akışları için yoklama işlemi çalıştırma veya altyapı yönetme gereğini ortadan kaldırırlar.
Tetikleyiciler Arka Planda Nasıl Çalışır?
Atlas tetikleyicileri dahili olarak MongoDB'nin hedef koleksiyonda açtığı bir değişiklik akışı kullanır. Eşleşen her change event tetikleyiciye iletilir; tetikleyici de ilişkili Atlas Function'ı olay belgesini bağımsız değişken olarak vererek çağırır. Function, Atlas'ın yönetilen JavaScript çalışma ortamında çalışır; sağlanacak veya ölçeklendirilecek sunucu yoktur. Tetikleyiciler otomatik ölçeklendirmeyle saniyede yüzlerce olaya kadar işleyebilir.
Tetikleyici Oluşturma: Temel Yapılandırma
Bir veritabanı tetikleyicisini yapılandırırken şunları belirtirsiniz: İzlenecek küme adı ve koleksiyon. Tepki verilecek işlem türleri: ekleme, güncelleme, değiştirme, silme veya bunların herhangi bir birleşimi. Tam Belge seçeneği etkinleştirildiğinde MongoDB, değişiklikten sonraki belgenin tamamını getirir ve olay yüküne ekler. Bağlı Function: çağrılacak Atlas Function.
// Trigger configuration (set in Atlas UI or App Services API)
// {
// name: 'onOrderInsert',
// type: 'DATABASE',
// config: {
// serviceId: '...',
// database: 'mydb',
// collection: 'orders',
// operationTypes: ['INSERT'],
// fullDocument: true
// },
// functionName: 'handleNewOrder'
// }Değişiklik Olayı Belgesi
Tetikleyici function'ına iletilen olay belgesinde şu temel alanlar bulunur: operationType ('insert', 'update', 'replace', 'delete'), fullDocument (etkinse değişiklikten sonraki belge), documentKey (değiştirilen belgenin _id değeri), updateDescription (güncellemelerde hangi alanların ayarlandığı veya kaldırıldığı) ve ns (veritabanı ile koleksiyon ad alanı).
// Example change event passed to the trigger function:
// {
// operationType: 'INSERT',
// fullDocument: { _id: ObjectId('...'), item: 'laptop', qty: 1, status: 'pending' },
// documentKey: { _id: ObjectId('...') },
// ns: { db: 'mydb', coll: 'orders' },
// clusterTime: Timestamp(...)
// }Tetikleyici Function'ı Yazma: Yeni Sipariş İşleyicisi
Tetikleyici function'ı bir Atlas Function'dır; context nesnesine (MongoDB istemcisi, hizmetler, kullanıcı bilgileri) erişimi olan sunucu tarafı JavaScript'tir ve değişiklik olayını ilk bağımsız değişken olarak alır. Yeni siparişleri işlemek için bir örüntü şöyledir: bildirim e-postası gönderin ve bir analiz sayacını güncelleyin.
// Atlas Function: handleNewOrder
exports = async function(changeEvent) {
const order = changeEvent.fullDocument
if (!order) return // safeguard if fullDocument is null
const db = context.services.get('mongodb-atlas').db('mydb')
// Update daily order count
await db.collection('daily_stats').updateOne(
{ date: new Date().toISOString().split('T')[0] },
{ $inc: { orderCount: 1, revenue: order.amount || 0 } },
{ upsert: true }
)
// Send notification (using a linked email service)
await context.services.get('myEmailService').send({
to: 'ops@company.com',
subject: 'New order: ' + order._id,
body: 'Amount: ' + order.amount
})
}Tetikleyici Olaylarını Filtreleme
Bir tetikleyiciye eşleştirme ifadesi ekleyerek yalnızca olayların bir alt kümesi için çalışmasını sağlayabilirsiniz. Bu, değişiklik akışı üzerinde bir toplama işlem hattı olarak uygulanır. Örneğin yalnızca belirli bir tutarın üzerindeki siparişler için tetikleyebilir, yalnızca durum alanının değiştiği güncellemelerde çalıştırabilir veya yalnızca belirli bir kiracıya ait belgelere tepki verebilirsiniz.
// Trigger match filter (aggregation pipeline on the change stream)
// Only fire the trigger when order amount > 500
// {
// 'match': {
// 'fullDocument.amount': { '$gt': 500 },
// 'operationType': 'INSERT'
// }
// }
// Only fire when 'status' field is part of the update
// {
// 'match': {
// 'updateDescription.updatedFields.status': { '$exists': true }
// }
// }Tam Belge ve Güncelleme Araması Karşılaştırması
INSERT ve REPLACE işlemlerinde fullDocument, değişiklik olayında her zaman kullanılabilir. UPDATE olaylarında ise fullDocument yalnızca tetikleyici yapılandırmasında Tam Belge seçeneğini etkinleştirirseniz kullanılabilir; bu seçenek Atlas'ın ek bir belge araması (ikinci bir okuma) yapmasına neden olur. Bu seçenek olmadan yalnızca updateDescription (değişen alanlar) kullanılabilir.
// Trigger function handling UPDATE events
exports = async function(changeEvent) {
const { operationType, updateDescription, fullDocument, documentKey } = changeEvent
if (operationType === 'UPDATE') {
const updatedFields = updateDescription.updatedFields
// Only process if 'status' was updated to 'shipped'
if (updatedFields.status === 'shipped') {
// Notify customer using documentKey._id to fetch full data
const db = context.services.get('mongodb-atlas').db('mydb')
const order = fullDocument || await db.collection('orders').findOne({ _id: documentKey._id })
// ... send shipment notification
}
}
}Tetikleyicilerde Hata İşleme ve Yeniden Deneme
Bir tetikleyici function'ı hata fırlatırsa veya zaman aşımına uğrarsa (en fazla 90 saniye), Atlas function'ı üstel beklemeyle otomatik olarak en fazla 3 kez yeniden dener. Tüm denemeler başarısız olursa olay, Atlas Tetikleyici hata günlüğünde başarısız olarak kaydedilir. Yeniden denemeleri güvenli şekilde ele almak için tetikleyici function'larını idempotent yazmalısınız: function'ın aynı olaya birden çok kez uygulanması aynı sonucu üretmelidir.
// Idempotent trigger: use upsert to avoid duplicate stats on retry
exports = async function(changeEvent) {
const order = changeEvent.fullDocument
const db = context.services.get('mongodb-atlas').db('mydb')
// Upsert is safe to retry: same result whether run once or five times
await db.collection('order_summaries').updateOne(
{ _id: order._id }, // dedup key = original document _id
{ $set: { status: order.status, amount: order.amount, processedAt: new Date() } },
{ upsert: true }
)
}Kademeli Tetikleyiciler: Veri Eşitleme Örüntüsü
Yaygın bir kullanım alanı veri eşitleme işlemidir: bir koleksiyondaki belge değiştiğinde tetikleyici, değişikliği başka bir koleksiyondaki normalleştirilmemiş kopyaya aktarır. Örneğin users koleksiyonunda bir kullanıcının e-posta adresi değiştiğinde tetikleyici, bu kullanıcıya başvuran orders koleksiyonundaki her belgenin normalleştirilmemiş e-posta alanını günceller.
// Sync user email to orders whenever user is updated
exports = async function(changeEvent) {
const updated = changeEvent.updateDescription.updatedFields
if (!updated.email) return // email didn't change, skip
const userId = changeEvent.documentKey._id
const db = context.services.get('mongodb-atlas').db('mydb')
await db.collection('orders').updateMany(
{ userId: userId },
{ $set: { userEmail: updated.email } }
)
}Tetikleyici Sıralaması ve Eşzamanlılık
Varsayılan olarak Atlas tetikleyicileri olayları geldikleri sırayla ardışık olarak işler. olay sıralamasını kapat seçeneğini (tetikleyici ayarlarında) etkinleştirirseniz daha yüksek aktarım hızı için birden çok function çağrısı paralel çalışabilir; ancak function'ınız eşzamanlı çalışmaya güvenli olmalıdır. Ardışık kip daha güvenlidir; paralel kip ise yüksek olay hızına sahip koleksiyonlarda daha hızlıdır.
Tetikleyicileri Devre Dışı Bırakma ve İzleme
Tetikleyicileri silmeden Atlas kullanıcı arayüzünden istediğiniz zaman etkinleştirebilir veya devre dışı bırakabilirsiniz. Atlas'taki Tetikleyici Çalıştırma Günlüğü her çağrıyı gösterir: durum (başarılı/başarısız/zaman aşımı), süre ve hata ayrıntıları. Başarısız tetikleyicilerde hata ayıklamak ve çalıştırma eğilimlerini izlemek için bu günlüğü kullanın. Atlas ayrıca Atlas İzleme panosunda tetikleyici ölçümlerini sunar.
Hızlı Kontrol
Bu derste MongoDB ve NoSQL Veritabanları kavramlarını anlayıp anlamadığınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: Atlas Veritabanı Tetikleyicileri, dahili olarak bir değişiklik akışı kullanarak ekleme/güncelleme/değiştirme/silme olaylarında bir Atlas Function'ı çalıştırır, eşleştirme ifadeleri hangi olayların function'ı çağıracağını filtreler ve Atlas başarısız çağrıları otomatik olarak yeniden denediği için function'lar idempotent olmalıdır. Sırada zamanlanmış tetikleyicileri ve cron işlerini 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
“Veritabanı Tetikleyicileri: CRUD Olaylarına Tepki Verme” dersi ücretsiz mi?
Evet — “Veritabanı Tetikleyicileri: CRUD Olaylarına Tepki Verme” 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.
“Veritabanı Tetikleyicileri: CRUD Olaylarına Tepki Verme” dersinde ne öğreneceğim?
Öğrenenler, ekleme veya güncelleme olaylarında çalışan ve verileri eşitlemek ya da bildirim göndermek için bir Atlas Function çalıştıran veritabanı tetikleyicisi oluşturacaklardı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 1. dersidir.
“Veritabanı Tetikleyicileri: CRUD Olaylarına Tepki Verme” 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
- Veritabanı Tetikleyicileri: CRUD Olaylarına Tepki Verme
- Zamanlanmış Tetikleyiciler ve Cron İşleri
- JavaScript ile Atlas Functions Yazma
- Hafif Web Kancaları Olarak HTTPS Uç Noktaları