Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit Azure Cosmos DB können Sie optimierte Abfragen mithilfe einer fluent-JavaScript-Schnittstelle ohne Kenntnisse der SQL-Sprache ausführen, die zum Schreiben gespeicherter Prozeduren oder Trigger verwendet werden kann. Weitere Informationen zur Unterstützung der JavaScript-Abfrage-API in Azure Cosmos DB finden Sie im Artikel zum Arbeiten mit der integrierten JavaScript-Abfrage-API in Azure Cosmos DB .
Gespeicherte Prozedur mit der JavaScript-Abfrage-API
Das folgende Codebeispiel ist ein Beispiel für die Verwendung der JavaScript-Abfrage-API im Kontext einer gespeicherten Prozedur. Die gespeicherte Prozedur fügt ein Azure Cosmos DB-Element ein, das durch einen Eingabeparameter angegeben wird, und aktualisiert ein Metadatendokument mithilfe der __.filter() Methode, wobei "minSize", "maxSize" und "totalSize" basierend auf der Größeneigenschaft des Eingabeelements aktualisiert werden.
Hinweis
__ (Doppelter Unterstrich) ist ein Alias für getContext().getCollection() bei der Verwendung der JavaScript-Abfrage-API.
/**
* Insert an item and update metadata doc: minSize, maxSize, totalSize based on item.size.
*/
function insertDocumentAndUpdateMetadata(item) {
// HTTP error codes sent to our callback function by CosmosDB server.
var ErrorCode = {
RETRY_WITH: 449,
}
var isAccepted = __.createDocument(__.getSelfLink(), item, {}, function(err, item, options) {
if (err) throw err;
// Check the item (ignore items with invalid/zero size and metadata itself) and call updateMetadata.
if (!item.isMetadata && item.size > 0) {
// Get the metadata. We keep it in the same container. it's the only item that has .isMetadata = true.
var result = __.filter(function(x) {
return x.isMetadata === true
}, function(err, feed, options) {
if (err) throw err;
// We assume that metadata item was pre-created and must exist when this script is called.
if (!feed || !feed.length) throw new Error("Failed to find the metadata item.");
// The metadata item.
var metaItem = feed[0];
// Update metaDoc.minSize:
// for 1st document use doc.Size, for all the rest see if it's less than last min.
if (metaItem.minSize == 0) metaItem.minSize = item.size;
else metaItem.minSize = Math.min(metaItem.minSize, item.size);
// Update metaItem.maxSize.
metaItem.maxSize = Math.max(metaItem.maxSize, item.size);
// Update metaItem.totalSize.
metaItem.totalSize += item.size;
// Update/replace the metadata item in the store.
var isAccepted = __.replaceDocument(metaItem._self, metaItem, function(err) {
if (err) throw err;
// Note: in case concurrent updates causes conflict with ErrorCode.RETRY_WITH, we can't read the meta again
// and update again because due to Snapshot isolation we will read same exact version (we are in same transaction).
// We have to take care of that on the client side.
});
if (!isAccepted) throw new Error("replaceDocument(metaItem) returned false.");
});
if (!result.isAccepted) throw new Error("filter for metaItem returned false.");
}
});
if (!isAccepted) throw new Error("createDocument(actual item) returned false.");
}
Nächste Schritte
In den folgenden Artikeln erfahren Sie mehr über gespeicherte Prozeduren, Trigger und benutzerdefinierte Funktionen in Azure Cosmos DB:
Registrieren und Verwenden gespeicherter Prozeduren in Azure Cosmos DB
Wie man Pre-Trigger und Post-Trigger in Azure Cosmos DB registriert und verwendet
Registrieren und Verwenden von benutzerdefinierten Funktionen in Azure Cosmos DB