$changeStream

La $changeStream fase de agregación abre un cursor de flujo de cambios que realiza un seguimiento de los cambios de datos en tiempo real. Esta fase permite a las aplicaciones reaccionar a las operaciones de inserción, actualización, eliminación y otras operaciones a medida que se producen en la colección.

Syntax

{
  $changeStream: {
    allChangesForCluster: <boolean>,
    fullDocument: <string>,
    fullDocumentBeforeChange: <string>,
    resumeAfter: <ResumeToken>,
    startAfter: <ResumeToken>,
    startAtOperationTime: <Timestamp>,
    showExpandedEvents: <boolean>
  }
}

Parámetros

Parámetro Description
allChangesForCluster Optional. booleano. Si es true, devuelve los cambios de todo el clúster. El valor predeterminado es False.
fullDocument Optional. Cuerda. Determina qué devolver para las operaciones de actualización. Opciones: 'default', 'updateLookup', 'whenAvailable', 'required'.
fullDocumentBeforeChange Optional. Cuerda. Devuelve la imagen previa del documento. Opciones: "off", "whenAvailable", "required".
resumeAfter Optional. Reanude el token para reanudar el flujo de cambios después de un evento específico.
startAfter Optional. Reanude el token para iniciar el flujo de cambios después de un evento específico.
startAtOperationTime Optional. marca de tiempo para iniciar la secuencia de cambios desde una hora específica.
showExpandedEvents Optional. booleano. Incluya otros eventos de secuencia de cambios. El valor predeterminado es False.

Examples

Considere este documento de ejemplo de la colección de tiendas.

{
    "_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
    "name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
    "location": {
        "lat": -89.2384,
        "lon": -46.4012
    },
    "staff": {
        "totalStaff": {
            "fullTime": 8,
            "partTime": 20
        }
    },
    "sales": {
        "totalSales": 75670,
        "salesByCategory": [
            {
                "categoryName": "Wine Accessories",
                "totalSales": 34440
            },
            {
                "categoryName": "Bitters",
                "totalSales": 39496
            },
            {
                "categoryName": "Rum",
                "totalSales": 1734
            }
        ]
    },
    "promotionEvents": [
        {
            "eventName": "Unbeatable Bargain Bash",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 6,
                    "Day": 23
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 7,
                    "Day": 2
                }
            },
            "discounts": [
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 7
                },
                {
                    "categoryName": "Bitters",
                    "discountPercentage": 15
                },
                {
                    "categoryName": "Brandy",
                    "discountPercentage": 8
                },
                {
                    "categoryName": "Sports Drinks",
                    "discountPercentage": 22
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 19
                }
            ]
        },
        {
            "eventName": "Steal of a Deal Days",
            "promotionalDates": {
                "startDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 21
                },
                "endDate": {
                    "Year": 2024,
                    "Month": 9,
                    "Day": 29
                }
            },
            "discounts": [
                {
                    "categoryName": "Organic Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "White Wine",
                    "discountPercentage": 20
                },
                {
                    "categoryName": "Sparkling Wine",
                    "discountPercentage": 19
                },
                {
                    "categoryName": "Whiskey",
                    "discountPercentage": 17
                },
                {
                    "categoryName": "Vodka",
                    "discountPercentage": 23
                }
            ]
        }
    ]
}

Ejemplo 1: Supervisión de todos los cambios en la colección de almacenes

Esta operación configura una secuencia de cambios para supervisar todos los cambios de la colección de almacenes.

db.stores.aggregate([
  {
    $changeStream: {
      fullDocument: "updateLookup"
    }
  }
])

Cuando se actualiza un documento de almacén, la secuencia de cambios devuelve el evento de cambio con el documento completo.

{
  "_id": { "_data": "AeARBpQ/AAAA" },
  "operationType": "update",
  "fullDocument": {
    "_id": "905d1939-e03a-413e-a9c4-221f74055aac",
    "name": "Trey Research | Home Office Depot - Lake Freeda",
    "sales": {
      "revenue": 42500
    },
    "company": "Trey Research",
    "lastUpdated": "ISODate('2024-06-16T10:30:00.000Z')"
  },
  "ns": {
    "db": "StoreData",
    "coll": "stores"
  },
  "documentKey": {
    "_id": "905d1939-e03a-413e-a9c4-221f74055aac"
  }
}