0Pricing
MongoDB Academy · Leçon

Déclencheurs de base de données : réagir aux événements CRUD

Les apprenants créeront un déclencheur de base de données qui se déclenche lors d’événements d’insertion ou de mise à jour et exécute une fonction Atlas pour synchroniser les données ou envoyer une notification.

Déclencheurs de base de données : réagir aux événements CRUD est une leçon MongoDB Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage MongoDB Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours MongoDB Academy comprend 4 leçons au total.

Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.

What Are Atlas Database Triggers?

Atlas Database Triggers are serverless event handlers that automatically execute an Atlas Function whenever a specific CRUD event (insert, update, replace, delete) occurs on a collection. They are built on top of MongoDB Change Streams and eliminate the need to run a polling process or manage infrastructure for event-driven workflows.

How Triggers Work Under the Hood

Internally, Atlas triggers use a change stream that MongoDB opens on the target collection. Every matching change event is forwarded to the trigger, which invokes the associated Atlas Function with the event document as its argument. The function runs in Atlas's managed JavaScript runtime — no servers to provision or scale. Triggers can handle up to hundreds of events per second with auto-scaling.

Creating a Trigger: Key Configuration

When configuring a database trigger you specify: Cluster name and collection to watch. Operation types to react to: insert, update, replace, delete, or any combination. Full Document option — when enabled, MongoDB fetches the complete document after the change and includes it in the event payload. Linked Function — the Atlas Function to invoke.

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

The Change Event Document

The event document passed to the trigger function has these key fields: operationType ('insert', 'update', 'replace', 'delete'), fullDocument (the document after the change, if enabled), documentKey (the _id of the changed document), updateDescription (for updates: which fields were set or unset), and ns (database and collection namespace).

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

Writing a Trigger Function: New Order Handler

A trigger function is an Atlas Function — server-side JavaScript that has access to the context object (MongoDB client, services, user info) and receives the change event as its first argument. Here is a pattern for handling new orders: send a notification email and update an analytics counter.

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

Filtering Trigger Events

You can add a match expression to a trigger so it only fires for a subset of events. This is implemented as an aggregation pipeline on the change stream. For example, only trigger on orders above a certain amount, only fire on updates where the status field changed, or only react to documents from a specific tenant.

// 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 vs Update Lookup

For INSERT and REPLACE operations, fullDocument is always available in the change event. For UPDATE events, fullDocument is only available if you enable the Full Document option in the trigger config, which causes Atlas to perform an additional document lookup (a second read). Without it, only updateDescription (changed fields) is available.

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

Error Handling and Retry in Triggers

If a trigger function throws an error or times out (maximum 90 seconds), Atlas automatically retries it up to 3 times with exponential backoff. After all retries fail, the event is logged as failed in the Atlas Trigger error log. You should write trigger functions to be idempotent — applying the function multiple times to the same event produces the same result — to handle retries safely.

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

Cascading Triggers: Data Sync Pattern

A common use case is data synchronisation: when a document changes in one collection, a trigger propagates the change to a denormalised copy in another collection. For example, when a user's email changes in the users collection, a trigger updates the denormalised email field in every document in the orders collection that references that user.

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

Trigger Ordering and Concurrency

By default, Atlas triggers process events sequentially in the order they arrive. If you enable event ordering off (in trigger settings), multiple function invocations can run in parallel for higher throughput — but then your function must be safe for concurrent execution. Sequential mode is safer; parallel mode is faster for high-event-rate collections.

Disabling and Monitoring Triggers

You can enable or disable triggers at any time from the Atlas UI without deleting them. The Trigger Execution Log in Atlas shows each invocation: status (success/failure/timeout), duration, and error details. Use this log to debug failing triggers and monitor execution trends. Atlas also exposes trigger metrics in the Atlas Monitoring dashboard.

Quick Check

Test your understanding of MongoDB & NoSQL Databases concepts from this lesson.

Lesson Recap

In this lesson you learned: Atlas Database Triggers fire an Atlas Function on insert/update/replace/delete events using a change stream internally, match expressions filter which events invoke the function, and functions must be idempotent because Atlas retries failed invocations automatically. Next up we explore scheduled triggers and cron jobs.

Questions Fréquemment Posées

La leçon « Déclencheurs de base de données : réagir aux événements CRUD » est-elle gratuite ?

Oui — le texte complet de « Déclencheurs de base de données : réagir aux événements CRUD » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours MongoDB Academy, passe à CoddyKit PRO. Le cours MongoDB Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Déclencheurs de base de données : réagir aux événements CRUD » ?

Les apprenants créeront un déclencheur de base de données qui se déclenche lors d’événements d’insertion ou de mise à jour et exécute une fonction Atlas pour synchroniser les données ou envoyer une n… Tu pratiques MongoDB Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer MongoDB Academy ?

Aucune expérience préalable n'est requise. MongoDB Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Déclencheurs de base de données : réagir aux événements CRUD » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon MongoDB Academy ?

Oui. Chaque leçon MongoDB Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Déclencheurs de base de données : réagir aux événements CRUD
  2. Déclencheurs planifiés et tâches cron
  3. Écrire des fonctions Atlas en JavaScript
  4. Points de terminaison HTTPS comme webhooks légers
← Retour à MongoDB Academy