View a markdown version of this page

$cambiar StreamSplitLargeEvent - Amazon DocumentDB

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

$cambiar StreamSplitLargeEvent

Los clústeres elásticos no admiten esta etapa de agregación.

Esta etapa está disponible a partir de la versión 8.0.2 del motor Amazon DocumentDB.

La fase de $changeStreamSplitLargeEvent agregación se utiliza dentro de una canalización de $ChangeStream para dividir los eventos que superen los 16 MB en fragmentos más pequeños. Devuelve cada fragmento de forma secuencial mediante el cursor de flujo de cambios.

Parámetros

Ninguna. La entrada al $changeStreamSplitLargeEvent escenario debe ser un documento vacío.

Ejemplo: MongoDB Shell

El siguiente ejemplo demuestra cómo usar el $changeStreamSplitLargeEvent escenario para dividir un evento de cambio sobredimensionado en varios fragmentos.

Ejemplo de consulta

// Insert a document db.inventory.insertOne({ _id: 1, item: "Widget", payload: "x".repeat(9 * 1024 * 1024) }) // Open change stream with the $changeStreamSplitLargeEvent stage var changeStream = db.inventory.aggregate([ { $changeStream: { fullDocument: "updateLookup" } }, { $changeStreamSplitLargeEvent: {} } ]); // Update the document db.inventory.updateOne({ _id: 1 }, { $set: { payload: "y".repeat(9 * 1024 * 1024) } }) // Read the change event if (changeStream.hasNext()) { print(tojson(changeStream.next())); }

Salida

{ _id: { _data: '...' }, splitEvent: { fragment: 1, of: 2}, ns: { db: 'test', coll: 'inventory' }, clusterTime: Timestamp(4, 1789154779), documentKey: { _id: 1 }, fullDocument: { _id: 1, item: 'Widget', payload: yyyyyyyy...(9437184 chars) }, operationType: 'update', } { _id: { _data: '...' }, splitEvent: { fragment: 2, of: 2}, updateDescription: { updatedFields: { payload: yyyyyyyy...(9437184 chars) }, removedFields: [] } }

Ejemplos de código

Para ver un ejemplo de código sobre el uso de la etapa de $changeStreamSplitLargeEvent agregación, elija la pestaña correspondiente al idioma que desea usar:

Node.js
const { MongoClient } = require('mongodb'); async function example() { const client = await MongoClient.connect('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false'); const db = client.db('test'); const collection = db.collection('inventory'); // Insert a large document first await collection.insertOne({ _id: 1, item: 'Widget', payload: 'x'.repeat(9 * 1024 * 1024) }); // Open change stream with $changeStreamSplitLargeEvent const changeStream = collection.watch( [{ $changeStreamSplitLargeEvent: {} }], { fullDocument: 'updateLookup' } ); changeStream.on('change', (change) => { console.log('Change detected:', change); }); // Update to trigger a split event — fullDocument + updateDescription > 16 MB setTimeout(async () => { console.log('Triggering update...'); await collection.updateOne({ _id: 1 }, { $set: { payload: 'y'.repeat(9 * 1024 * 1024) } }); }, 1000); // Keep connection open to receive changes // In production, handle cleanup appropriately } example();
Python
from pymongo import MongoClient import threading import time def example(): client = MongoClient('mongodb://<username>:<password>@<cluster-endpoint>:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false') db = client['test'] collection = db['inventory'] # Insert large document first collection.drop() collection.insert_one({'_id': 1, 'item': 'Widget', 'payload': 'x' * (9 * 1024 * 1024)}) # Open change stream with $changeStreamSplitLargeEvent change_stream = collection.watch( [{'$changeStreamSplitLargeEvent': {}}], full_document='updateLookup' ) # Update in separate thread after delay def update_doc(): collection.update_one({'_id': 1}, {'$set': {'payload': 'y' * (9 * 1024 * 1024)}}) threading.Thread(target=update_doc).start() # Watch for changes for change in change_stream: print('Change detected:', change) client.close() example()