Opgeslagen procedures, triggers en door de gebruiker gedefinieerde functies registreren en gebruiken in Azure Cosmos DB
Artikel
VAN TOEPASSING OP: NoSQL
De API voor NoSQL in Azure Cosmos DB biedt ondersteuning voor het registreren en aanroepen van opgeslagen procedures, triggers en door de gebruiker gedefinieerde functies (UDF's) die zijn geschreven in JavaScript. Nadat u een of meer opgeslagen procedures, triggers of door de gebruiker gedefinieerde functies hebt gedefinieerd, kunt u deze laden en weergeven in Azure Portal met behulp van Data Explorer.
U kunt de API voor NoSQL SDK op meerdere platforms gebruiken, waaronder .NET v2 (verouderd), .NET v3, Java, JavaScript of Python SDK's om deze taken uit te voeren. Als u nog niet eerder met een van deze SDK's hebt gewerkt, raadpleegt u het quickstart-artikel voor de juiste SDK:
In de volgende codevoorbeelden wordt ervan uitgegaan dat u al over en container variabelen beschiktclient. Als u deze variabelen wilt maken, raadpleegt u de juiste quickstart voor uw platform.
Opgeslagen procedures uitvoeren
Opgeslagen procedures worden geschreven met behulp van JavaScript. Ze kunnen items in een Azure Cosmos DB-container maken, bijwerken, lezen, opvragen en verwijderen. Zie Opgeslagen procedures schrijven voor meer informatie.
De volgende voorbeelden laten zien hoe u een opgeslagen procedure registreert en aanroept met behulp van de Azure Cosmos DB-SDK's. Zie Items maken met behulp van opgeslagen procedures voor de bron voor deze opgeslagen procedure, opgeslagen als spCreateToDoItem.js.
Notitie
Wanneer u een opgeslagen procedure uitvoert, moet u voor gepartitioneerde containers een partitiesleutelwaarde opgeven in de aanvraagopties. Opgeslagen procedures zijn altijd gerelateerd aan een partitiesleutel. Items met een andere partitiesleutelwaarde zijn niet zichtbaar voor de opgeslagen procedure. Dit principe is ook van toepassing op triggers.
De volgende code laat zien hoe u een opgeslagen procedure aanroept met behulp van de Python SDK:
import uuid
new_id= str(uuid.uuid4())
# Creating a document for a container with "id" as a partition key.
new_item = {
"id": new_id,
"category":"Personal",
"name":"Groceries",
"description":"Pick up strawberries",
"isComplete":False
}
result = container.scripts.execute_stored_procedure(sproc=created_sproc,params=[new_item], partition_key=new_id)
Pretriggers uitvoeren
In de volgende voorbeelden ziet u hoe u een pretrigger registreert en aanroept met behulp van de Azure Cosmos DB SDK's. Zie Pretriggers voor de bron van deze pretrigger, opgeslagen als trgPreValidateToDoItemTimestamp.js.
Wanneer u een bewerking uitvoert door de naam van de trigger in een List object op te PreTriggerInclude geven en vervolgens door te geven, worden pretriggers doorgegeven aan het RequestOptions object.
Notitie
Hoewel de naam van de trigger wordt doorgegeven als een List, kunt u nog steeds slechts één trigger per bewerking uitvoeren.
De volgende code laat zien hoe u een pretrigger aanroept met behulp van de Python SDK:
item = {'category': 'Personal', 'name': 'Groceries',
'description': 'Pick up strawberries', 'isComplete': False}
result = container.create_item(item, pre_trigger_include='trgPreValidateToDoItemTimestamp')
Navolgende triggers uitvoeren
De volgende voorbeelden laten zien hoe u een navolgende trigger registreert met behulp van de Azure Cosmos DB-SDK's. Zie Post-triggers voor de bron van dit voorbeeld na de trigger, opgeslagen als trgPostUpdateMetadata.js
Werken met door de gebruiker gedefinieerde functies
De volgende voorbeelden laten zien hoe u een door de gebruiker gedefinieerde functie registreert met behulp van de Azure Cosmos DB-SDK's. Zie Voor de bron van dit door de gebruiker gedefinieerde functievoorbeeld, opgeslagen als udfTax.js, hoe u door de gebruiker gedefinieerde functies schrijft.
De volgende code laat zien hoe u een door de gebruiker gedefinieerde functie registreert met behulp van de .NET SDK v2:
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);
De volgende code laat zien hoe u een door de gebruiker gedefinieerde functie aanroept met behulp van de .NET SDK v2:
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
}
De volgende code laat zien hoe u een door de gebruiker gedefinieerde functie registreert met behulp van de .NET SDK v3:
await client.GetContainer("database", "container").Scripts.CreateUserDefinedFunctionAsync(new UserDefinedFunctionProperties
{
Id = "Tax",
Body = File.ReadAllText(@"..\js\Tax.js")
});
De volgende code laat zien hoe u een door de gebruiker gedefinieerde functie aanroept met behulp van de .NET SDK v3:
var iterator = client.GetContainer("database", "container").GetItemQueryIterator<dynamic>("SELECT * FROM Incomes t WHERE udf.Tax(t.income) > 20000");
while (iterator.HasMoreResults)
{
var results = await iterator.ReadNextAsync();
foreach (var result in results)
{
//iterate over results
}
}
De volgende code laat zien hoe u een door de gebruiker gedefinieerde functie registreert met de Java SDK: