Změna streamů v rozhraní API služby Azure Cosmos DB pro MongoDB

PLATÍ pro: Azure Cosmos DB API pro MongoDB

Podpora kanálu změn v rozhraní API služby Azure Cosmos DB pro MongoDB je dostupná pomocí rozhraní API pro datové proudy změn. Pomocí rozhraní API pro datové proudy změn mohou vaše aplikace získat změny provedené v kolekci nebo u položek v jednom horizontálním oddílu. Později můžete na základě výsledků provádět další akce. Změny položek v kolekci se zachycují v pořadí podle času jejich úpravy a pro klíč horizontálního dělení je zaručeno pořadí řazení.

Poznámka

Pokud chcete použít datové proudy změn, vytvořte účet rozhraní API služby Azure Cosmos DB pro MongoDB se serverem verze 3.6 nebo vyšší. Pokud spustíte příklady změn streamu oproti starší verzi, může se zobrazit nerozpoznaný název fáze kanálu: $changeStream chyba.

Příklady

Následující příklad ukazuje, jak získat datové proudy změn pro všechny položky v kolekci. Tento příklad vytvoří kurzor ke sledování položek, když jsou vloženy, aktualizovány nebo nahrazeny. K získání datových proudů změn se vyžaduje fáze, fáze a $match $project fullDocument možnost. Sledování operací odstranění pomocí datových proudů změn se v současné době nepodporuje. Alternativním řešením je přidat k odstraněných položkám změkčnou značku. Do položky můžete například přidat atribut s názvem Odstraněno. Pokud chcete položku odstranit, můžete hodnotu "deleted" nastavit na a pro true položku nastavit hodnotu TTL. Vzhledem k tomu, že aktualizace "odstraněno" na je aktualizace, bude tato true změna viditelná v datovém proudu změn.

var cursor = db.coll.watch(
    [
        { $match: { "operationType": { $in: ["insert", "update", "replace"] } } },
        { $project: { "_id": 1, "fullDocument": 1, "ns": 1, "documentKey": 1 } }
    ],
    { fullDocument: "updateLookup" });

while (!cursor.isExhausted()) {
    if (cursor.hasNext()) {
        printjson(cursor.next());
    }
}

Změny v rámci jednoho horizontálního oddílu

Následující příklad ukazuje, jak získat změny položek v rámci jednoho horizontálního oddílu. Tento příklad získá změny položek, které mají klíč horizontálního dělení roven "a" a hodnota klíče horizontálního dělení se rovná "1". Je možné mít různé klienty, kteří čtou změny z různých horizontálních oddílů paralelně.

var cursor = db.coll.watch(
    [
        { 
            $match: { 
                $and: [
                    { "fullDocument.a": 1 }, 
                    { "operationType": { $in: ["insert", "update", "replace"] } }
                ]
            }
        },
        { $project: { "_id": 1, "fullDocument": 1, "ns": 1, "documentKey": 1} }
    ],
    { fullDocument: "updateLookup" });

Aktuální omezení

Při používání datových proudů změn platí následující omezení:

  • Vlastnosti operationType updateDescription a se zatím ve výstupním dokumentu nepodporují.
  • V současné době se podporují typy operací insert update , a replace . Operace odstranění ani jiné události se ale zatím nepodporují.

Z důvodu těchto omezení se $match fáze, $project fáze a fullDocument, jak je znázorněno v předchozích příkladech.

Na rozdíl od kanálu změn v rozhraní SQL API služby Azure Cosmos DB neexistuje samostatná knihovna Change Feed Processor Library pro využití datových proudů změn nebo potřebu kontejneru zapůjčení. V současné době není k dispozici podpora Azure Functions triggerů pro zpracování datových proudů změn.

Zpracování chyb

Při použití datových proudů změn se podporují následující kódy chyb a zprávy:

  • Kód chyby HTTP 16500 – Při omezování datového proudu změn se vrátí prázdná stránka.

  • NamespaceNotFound (OperationType Invalidate) – Pokud pro kolekci, která neexistuje, spustíte změnu datového proudu nebo pokud se kolekce zahodí, vrátí NamespaceNotFound se chyba. Vzhledem k operationType tomu, že vlastnost nelze vrátit ve výstupním dokumentu, místo chyby operationType Invalidate se vrátí NamespaceNotFound chyba.

Další kroky