Ändra dataströmmar i Azure Cosmos DB API för MongoDB
GÄLLER för:
Azure Cosmos DB-API för MongoDB
Stöd för ändringsflöde i Azure Cosmos DB API för MongoDB är tillgängligt med hjälp av API:et för ändringsströmmar. Med hjälp av API:et för ändringsströmmar kan dina program hämta de ändringar som gjorts i samlingen eller till objekten i en enda shard. Senare kan du vidta ytterligare åtgärder baserat på resultatet. Ändringar av objekten i samlingen fångas i den ordning de ändras och sorteringsordningen garanteras per shardnyckel.
Anteckning
Om du vill använda ändringsströmmar skapar du Azure Cosmos DB API för MongoDB-konto med serverversion 3.6 eller senare. Om du kör exempel på ändringsströmmar mot en tidigare version kan du se namnet på fasen Unrecognized pipeline: $changeStream error.
Exempel
I följande exempel visas hur du hämtar ändringsströmmar för alla objekt i samlingen. I det här exemplet skapas en markör för att titta på objekt när de infogas, uppdateras eller ersätts. Fas, $match fas och alternativ krävs för att hämta $project fullDocument ändringsströmmarna. Det finns för närvarande inte stöd för borttagningsåtgärder som använder ändringsströmmar. Som en tillfällig lösning kan du lägga till en mjuk markör för de objekt som tas bort. Du kan till exempel lägga till ett attribut i objektet med namnet "deleted". När du vill ta bort objektet kan du ange "borttagna" till och true ange ett TTL-värde för objektet. Eftersom uppdatering av "borttagna" true till är en uppdatering visas den här ändringen i ändringsströmmen.
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());
}
}
Ändringar inom en enda shard
I följande exempel visas hur du hämtar ändringar av objekten i en enda shard. I det här exemplet hämtar ändringar av objekt som har en shardnyckel som är lika med "a" och värdet för shardnyckeln är lika med "1". Det går att ha olika klienter som läser ändringar från olika shards parallellt.
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" });
Skala om ändringsströmmar
När du använder ändringsströmmar i stor skala är det bäst att sprida belastningen jämnt. Använd det anpassade kommandot GetChangeStreamTokens för att sprida belastningen över fysiska shards/partitioner.
Aktuella begränsningar
Följande begränsningar gäller när du använder ändringsströmmar:
- Egenskaperna
operationTypeoch stöds inte ännu iupdateDescriptionutdatadokumentet. - Drifttyperna
insert, och stöds förupdatereplacenärvarande. Borttagningsåtgärden eller andra händelser stöds dock inte ännu.
På grund av dessa begränsningar krävs $match, $project och fullDocument som visas i föregående exempel.
Till skillnad från ändringsflödet i Azure Cosmos DB:s SQL API finns det inte ett separat bibliotek för ändringsflödesprocessorer för att använda ändringsströmmar eller ett behov av en lånecontainer. Det finns för närvarande inte stöd Azure Functions utlösare för att bearbeta ändringsströmmar.
Felhantering
Följande felkoder och meddelanden stöds när du använder ändringsströmmar:
HTTP-felkod 16500 – När ändringsströmmen begränsas returneras en tom sida.
NamespaceNotFound (OperationType Invalidate) – Om du kör en ändringsström i samlingen som inte finns eller om samlingen tas bort returneras
NamespaceNotFoundett fel. Eftersom egenskapenoperationTypeinte kan returneras i utdatadokumentet returneras felet ioperationType Invalidatestället förNamespaceNotFoundfelet.