Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure Cosmos DB vous permet d’effectuer des requêtes optimisées à l’aide d’une interface JavaScript fluent sans aucune connaissance du langage SQL qui peut être utilisé pour écrire des procédures stockées ou des déclencheurs. Pour en savoir plus sur la prise en charge de l’API de requête JavaScript dans Azure Cosmos DB, consultez l’article Utilisation de l’API de requête intégrée du langage JavaScript dans l’article Azure Cosmos DB .
Procédure stockée à l’aide de l’API de requête JavaScript
L’exemple de code suivant est un exemple de la façon dont l’API de requête JavaScript est utilisée dans le contexte d’une procédure stockée. La procédure stockée insère un élément Azure Cosmos DB spécifié par un paramètre d’entrée et met à jour un document de métadonnées à l’aide de la __.filter() méthode, avec minSize, maxSize et totalSize en fonction de la propriété de taille de l’élément d’entrée.
Note
__ (trait de soulignement double) est un alias pour getContext().getCollection() lorsqu'on utilise l'API de requête JavaScript.
/**
* 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.");
}
Étapes suivantes
Consultez les articles suivants pour en savoir plus sur les procédures stockées, les déclencheurs et les fonctions définies par l’utilisateur dans Azure Cosmos DB :
Comment inscrire et utiliser des procédures stockées dans Azure Cosmos DB
Comment inscrire et utiliser des pré-déclencheurs et des post-déclencheurs dans Azure Cosmos DB
Comment inscrire et utiliser des fonctions définies par l’utilisateur dans Azure Cosmos DB