Freigeben über


Registrieren und Verwenden von gespeicherten Prozeduren, Triggern und benutzerdefinierten Funktionen in Azure Cosmos DB

GILT FÜR: NoSQL

Die API für NoSQL in Azure Cosmos DB unterstützt das Registrieren und Aufrufen von gespeicherten Prozeduren, Triggern und benutzerdefinierten Funktionen (User-Defined Functions, UDFs), die in JavaScript geschrieben wurden. Nachdem Sie eine oder mehrere gespeicherte Prozeduren, Trigger oder UDFs definiert haben, können Sie sie mithilfe des Daten-Explorers im Azure-Portal laden und anzeigen.

Sie können die API für NoSQL SDK auf mehreren Plattformen verwenden, einschließlich .NET v2 (Legacy), .NET v3, Java, JavaScript oder Python-SDKs, um diese Aufgaben auszuführen. Wenn Sie noch nicht mit einem dieser SDKs gearbeitet haben, lesen Sie den Schnellstartartikel für das entsprechende SDK:

Softwareentwicklungskit (SDK) Schnellstart
.NET v3 Azure Cosmos DB für NoSQL-Clientbibliothek für .NET
Java Erstellen einer Java-App zum Verwalten von Azure Cosmos DB für NoSQL-Daten
JavaScript Azure Cosmos DB für NoSQL-Clientbibliothek für Node.js
Python Azure Cosmos DB für NoSQL-Clientbibliothek für Python

Wichtig

In den folgenden Codebeispielen wird davon ausgegangen, dass Sie bereits über die Variablen client und container verfügen. Wenn Sie diese Variablen erstellen müssen, lesen Sie die entsprechende Schnellstartanleitung für Ihre Plattform.

Ausführen gespeicherter Prozeduren

Gespeicherte Prozeduren werden mit JavaScript geschrieben. Sie können Elemente in einem Azure Cosmos DB-Container erstellen, aktualisieren, lesen, abfragen und löschen. Weitere Informationen finden Sie unter Schreiben von gespeicherten Prozeduren.

Die folgenden Beispiele zeigen, wie Sie eine gespeicherte Prozedur mithilfe der Azure Cosmos DB SDKs registrieren und aufrufen. Die Quelle dieses Beispiels, die als spCreateToDoItem.jsgespeichert wurde, finden Sie unter Erstellen von Elementen mithilfe gespeicherter Prozeduren.

Hinweis

Wenn Sie eine gespeicherte Prozedur in partitionierten Containern ausführen, muss in den Anforderungsoptionen ein Partitionsschlüsselwert angegeben werden. Gespeicherte Prozeduren sind immer an einen Partitionsschlüssel gebunden. Elemente, die einen anderen Partitionsschlüsselwert aufweisen, sind in der gespeicherten Prozedur nicht sichtbar. Dieses Prinzip gilt auch für Trigger.

Das folgende Beispiel zeigt, wie Sie mit dem .NET SDK v2 eine gespeicherte Prozedur registrieren:

string storedProcedureId = "spCreateToDoItems";
StoredProcedure newStoredProcedure = new StoredProcedure
   {
       Id = storedProcedureId,
       Body = File.ReadAllText($@"..\js\{storedProcedureId}.js")
   };
Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
var response = await client.CreateStoredProcedureAsync(containerUri, newStoredProcedure);
StoredProcedure createdStoredProcedure = response.Resource;

Der folgende Code zeigt, wie Sie mit dem .NET SDK v2 eine gespeicherte Prozedur aufrufen:

dynamic[] newItems = new dynamic[]
{
    new {
        category = "Personal",
        name = "Groceries",
        description = "Pick up strawberries",
        isComplete = false
    },
    new {
        category = "Personal",
        name = "Doctor",
        description = "Make appointment for check up",
        isComplete = false
    }
};

Uri uri = UriFactory.CreateStoredProcedureUri("myDatabase", "myContainer", "spCreateToDoItem");
RequestOptions options = new RequestOptions { PartitionKey = new PartitionKey("Personal") };
var result = await client.ExecuteStoredProcedureAsync<string>(uri, options, new[] { newItems });

So wird's ausgeführt: Ausführen von Vorabtriggern

Die folgenden Beispiele zeigen, wie Sie einen Vorabtrigger mithilfe der Azure Cosmos DB-SDKs registrieren und aufrufen. Die Quelle dieses Vorabauslöserbeispiels, die als trgPreValidateToDoItemTimestamp.jsgespeichert wurde, finden Sie unter "Pre-Triggers".

Wenn Sie einen Vorgang ausführen, indem Sie PreTriggerInclude angeben und dann den Namen des Triggers in einem List Objekt übergeben, werden Vorabtrigger im RequestOptions Objekt übergeben.

Hinweis

Auch wenn der Name des Triggers als List übergeben wird, können Sie dennoch nur einen Trigger pro Vorgang ausführen.

Der folgende Code zeigt, wie Sie einen Vorabauslöser mithilfe des .NET SDK v2 registrieren:

string triggerId = "trgPreValidateToDoItemTimestamp";
Trigger trigger = new Trigger
{
    Id =  triggerId,
    Body = File.ReadAllText($@"..\js\{triggerId}.js"),
    TriggerOperation = TriggerOperation.Create,
    TriggerType = TriggerType.Pre
};
Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
await client.CreateTriggerAsync(containerUri, trigger);

Der folgende Code zeigt, wie Sie einen Vorabtrigger mithilfe des .NET SDK v2 aufrufen:

dynamic newItem = new
{
    category = "Personal",
    name = "Groceries",
    description = "Pick up strawberries",
    isComplete = false
};

Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
RequestOptions requestOptions = new RequestOptions { PreTriggerInclude = new List<string> { "trgPreValidateToDoItemTimestamp" } };
await client.CreateDocumentAsync(containerUri, newItem, requestOptions);

Ausführen von nachgestellten Triggern

Die folgenden Beispiele zeigen, wie Sie einen nachgestellten Trigger mithilfe der Azure Cosmos DB SDKs registrieren. Die Quelle dieses Beispiels für Post-Trigger (gespeichert als trgPostUpdateMetadata.js) finden Sie unter Post-Trigger.

Der folgende Code zeigt, wie Sie mit dem .NET SDK v2 einen Post-Trigger registrieren.

string triggerId = "trgPostUpdateMetadata";
Trigger trigger = new Trigger
{
    Id = triggerId,
    Body = File.ReadAllText($@"..\js\{triggerId}.js"),
    TriggerOperation = TriggerOperation.Create,
    TriggerType = TriggerType.Post
};
Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
await client.CreateTriggerAsync(containerUri, trigger);

Der folgende Code zeigt, wie Sie mit dem .NET SDK v2 einen nachgestellten Trigger aufrufen:

var newItem = { 
    name: "artist_profile_1023",
    artist: "The Band",
    albums: ["Hellujah", "Rotators", "Spinning Top"]
};

RequestOptions options = new RequestOptions { PostTriggerInclude = new List<string> { "trgPostUpdateMetadata" } };
Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
await client.createDocumentAsync(containerUri, newItem, options);

Arbeiten mit benutzerdefinierten Funktionen

Die folgenden Beispiele zeigen, wie Sie eine UDF mithilfe der Azure Cosmos DB-SDKs registrieren. Informationen zur Quelle dieses Beispiels, die als udfTax.js gespeichert wurde, finden Sie unter Wie man benutzerdefinierte Funktionen schreibt.

Der folgende Code zeigt, wie Sie mit dem .NET SDK v2 eine benutzerdefinierte Funktion registrieren:

string udfId = "Tax";
var udfTax = new UserDefinedFunction
{
    Id = udfId,
    Body = File.ReadAllText($@"..\js\{udfId}.js")
};

Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
await client.CreateUserDefinedFunctionAsync(containerUri, udfTax);

Der folgende Code zeigt, wie Sie mit dem .NET SDK v2 eine benutzerdefinierte Funktion aufrufen:

Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
var results = client.CreateDocumentQuery<dynamic>(containerUri, "SELECT * FROM Incomes t WHERE udf.Tax(t.income) > 20000"));

foreach (var result in results)
{
    //iterate over results
}

Nächste Schritte