MongoDB Academy · Pelajaran

Pencetus Pangkalan Data: Bertindak Balas terhadap Peristiwa CRUD

Pelajar akan mencipta pencetus pangkalan data yang dicetuskan pada peristiwa sisipan atau kemas kini dan menjalankan Fungsi Atlas untuk menyegerakkan data atau menghantar pemberitahuan.

Pelajaran 1 daripada 413 langkah

Pencetus Pangkalan Data: Bertindak Balas terhadap Peristiwa CRUD ialah pelajaran MongoDB Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran MongoDB Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus MongoDB Academy merangkumi sejumlah 4 pelajaran.

Apakah Atlas Database Triggers?

Atlas Database Triggers ialah pengendali peristiwa tanpa pelayan yang melaksanakan Atlas Function secara automatik apabila peristiwa CRUD tertentu (insert, update, replace, delete) berlaku pada sesuatu collection. Ia dibina berasaskan MongoDB Change Streams dan menghapuskan keperluan untuk menjalankan proses pengundian atau mengurus infrastruktur bagi aliran kerja dipacu peristiwa.

Cara Triggers Berfungsi Di Sebalik Tabir

Secara dalaman, Atlas triggers menggunakan aliran perubahan yang dibuka oleh MongoDB pada collection sasaran. Setiap change event yang sepadan dihantar kepada trigger, yang memanggil Atlas Function berkaitan dengan dokumen peristiwa sebagai argumennya. Fungsi tersebut berjalan dalam masa jalan JavaScript terurus Atlas — tiada pelayan perlu diperuntukkan atau diskalakan. Triggers boleh mengendalikan sehingga ratusan peristiwa sesaat dengan penskalaan automatik.

Mencipta Trigger: Konfigurasi Utama

Semasa mengkonfigurasi trigger pangkalan data, anda menentukan: Nama cluster dan collection untuk dipantau. Jenis operasi yang perlu dicetuskan: insert, update, replace, delete atau apa-apa gabungan. Pilihan Full Document — apabila didayakan, MongoDB mengambil dokumen lengkap selepas perubahan dan menyertakannya dalam muatan peristiwa. Linked Function — Atlas Function yang hendak dipanggil.

// 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'
// }

Dokumen Peristiwa Perubahan

Dokumen peristiwa yang dihantar kepada fungsi trigger mempunyai medan utama berikut: operationType ('insert', 'update', 'replace', 'delete'), fullDocument (dokumen selepas perubahan, jika didayakan), documentKey (​_id dokumen yang berubah), updateDescription (bagi kemas kini: medan yang ditetapkan atau dinyahsetkan), dan ns (ruang nama pangkalan data dan collection).

// 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(...)
// }

Menulis Fungsi Trigger: Pengendali Pesanan Baharu

Fungsi trigger ialah Atlas Function — JavaScript sisi pelayan yang mempunyai akses kepada objek context (klien MongoDB, perkhidmatan, maklumat pengguna) dan menerima change event sebagai argumen pertamanya. Berikut ialah corak untuk mengendalikan pesanan baharu: hantar e-mel pemberitahuan dan kemas kini pembilang analitis.

// 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
  })
}

Menapis Peristiwa Trigger

Anda boleh menambah ungkapan padanan pada trigger supaya trigger hanya dicetuskan untuk subset peristiwa. Ini dilaksanakan sebagai saluran paip pengagregatan pada aliran perubahan. Contohnya, cetuskan hanya untuk pesanan melebihi jumlah tertentu, cetuskan hanya pada kemas kini apabila medan status berubah, atau hanya bertindak balas terhadap dokumen daripada penyewa tertentu.

// 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 }
//   }
// }

Full Document berbanding Carian Kemas Kini

Bagi operasi INSERT dan REPLACE, fullDocument sentiasa tersedia dalam change event. Bagi peristiwa UPDATE, fullDocument hanya tersedia jika anda mendayakan pilihan Full Document dalam konfigurasi trigger, yang menyebabkan Atlas melakukan carian dokumen tambahan (bacaan kedua). Tanpa pilihan tersebut, hanya updateDescription (medan yang berubah) tersedia.

// 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
    }
  }
}

Pengendalian Ralat dan Percubaan Semula dalam Triggers

Jika fungsi trigger menghasilkan ralat atau tamat masa (maksimum 90 saat), Atlas akan mencuba semula secara automatik sehingga 3 kali dengan sela masa eksponen. Selepas semua percubaan semula gagal, peristiwa tersebut direkodkan sebagai gagal dalam log ralat Atlas Trigger. Anda patut menulis fungsi trigger supaya idempoten — penggunaan fungsi berulang kali pada peristiwa yang sama menghasilkan hasil yang sama — agar percubaan semula dapat dikendalikan dengan selamat.

// 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 }
  )
}

Triggers Berantai: Corak Penyegerakan Data

Kes penggunaan yang lazim ialah penyegerakan data: apabila dokumen berubah dalam satu collection, trigger menyebarkan perubahan tersebut kepada salinan ternormalisasi dalam collection lain. Contohnya, apabila e-mel pengguna berubah dalam collection users, trigger mengemas kini medan e-mel ternormalisasi dalam setiap dokumen collection orders yang merujuk pengguna tersebut.

// 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 } }
  )
}

Susunan Trigger dan Keserentakan

Secara lalai, Atlas triggers memproses peristiwa secara berjujukan mengikut susunan ketibaannya. Jika anda mendayakan event ordering off (dalam tetapan trigger), berbilang pemanggilan fungsi boleh berjalan secara selari untuk daya pemprosesan yang lebih tinggi — tetapi fungsi anda mestilah selamat untuk pelaksanaan serentak. Mod berjujukan lebih selamat; mod selari lebih pantas untuk collection dengan kadar peristiwa yang tinggi.

Menyahdayakan dan Memantau Triggers

Anda boleh mendayakan atau menyahdayakan triggers pada bila-bila masa daripada UI Atlas tanpa memadamkannya. Log Pelaksanaan Trigger dalam Atlas menunjukkan setiap pemanggilan: status (berjaya/gagal/tamat masa), tempoh dan butiran ralat. Gunakan log ini untuk menyahpepijat triggers yang gagal dan memantau trend pelaksanaan. Atlas turut menyediakan metrik trigger dalam papan pemuka Pemantauan Atlas.

Semakan Pantas

Uji pemahaman anda tentang konsep MongoDB & Pangkalan Data NoSQL daripada pelajaran ini.

Imbas Kembali Pelajaran

Dalam pelajaran ini, anda telah mempelajari bahawa: Atlas Database Triggers mencetuskan Atlas Function pada peristiwa insert/update/replace/delete menggunakan aliran perubahan secara dalaman, ungkapan padanan menapis peristiwa yang memanggil fungsi, dan fungsi mestilah idempoten kerana Atlas mencuba semula pemanggilan yang gagal secara automatik. Seterusnya, kita akan meneroka scheduled triggers dan kerja cron.

Percuma untuk bermula

Pelajari JavaScript dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
30
Pelajaran
120

Soalan Lazim

Adakah pelajaran “Pencetus Pangkalan Data: Bertindak Balas terhadap Peristiwa CRUD” percuma?

Ya — teks penuh “Pencetus Pangkalan Data: Bertindak Balas terhadap Peristiwa CRUD” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus MongoDB Academy, tingkat taraf kepada CoddyKit PRO. Kursus MongoDB Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pencetus Pangkalan Data: Bertindak Balas terhadap Peristiwa CRUD”?

Pelajar akan mencipta pencetus pangkalan data yang dicetuskan pada peristiwa sisipan atau kemas kini dan menjalankan Fungsi Atlas untuk menyegerakkan data atau menghantar pemberitahuan. Anda berlatih MongoDB Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan MongoDB Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran MongoDB Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “Pencetus Pangkalan Data: Bertindak Balas terhadap Peristiwa CRUD” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran MongoDB Academy ini?

Ya. Setiap pelajaran MongoDB Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Pencetus Pangkalan Data: Bertindak Balas terhadap Peristiwa CRUD
  2. Pencetus Berjadual dan Tugas Cron
  3. Menulis Fungsi Atlas dalam JavaScript
  4. Titik Akhir HTTPS sebagai Webhook Ringan
← Kembali ke MongoDB Academy