你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
触发器
Azure Cosmos DB 是一个全球分布式多模型数据库,支持文档、图形和键值数据模型。 本部分中的内容用于通过 REST 使用 SQL API 管理触发器资源。
触发器是应用程序逻辑片段,可以在 (前触发器) 之前执行, (后触发器) 创建、删除和替换文档之后执行。 触发器是用 JavaScript 编写的。 预触发器和后触发器都不使用参数。 与存储过程一样,触发器在集合范围内有效,因此应用程序逻辑的范围将限于该集合。
与存储过程相似,触发器资源也有固定架构。 body 属性包含应用程序逻辑。 以下示例说明了触发器的 JSON 构造。
{
"id":"PostTrigger-UpdateMetaAll",
"body": "
function updateMetadata() {
var context = getContext();
var collection = context.getCollection();
var response = context.getResponse();
var createdDocument = response.getBody();
// query for metadata document
var filterQuery = 'SELECT * FROM root r WHERE r.id = "_metadata"';
var accept = collection.queryDocuments(collection.getSelfLink(), filterQuery,
updateMetadataCallback);
if(!accept) throw "Unable to update metadata, abort";
function updateMetadataCallback(err, documents, responseOptions) {
if(err) throw new Error("Error" + err.message);
if(documents.length != 1) throw 'Unable to find metadata document';
var metadataDocument = documents[0];
// update metadata
metadataDocument.createdDocuments += 1;
metadataDocument.createdNames += " " + createdDocument.id;
var accept = collection.replaceDocument(metadataDocument._self,
metadataDocument, function(err, docReplaced) {
if(err) throw "Unable to update metadata, abort";
});
if(!accept) throw "Unable to update metadata, abort";
return;
}
}
",
"_rid":"hLEEAI1YjgcBAAAAAAAAgA==",
"_ts":1408058682,
"_self":"dbs\/hLEEAA==\/colls\/hLEEAI1Yjgc=\/udfs\/hLEEAI1YjgcBAAAAAAAAgA==\/",
"_etag":"00004100-0000-0000-0000-53ed453a0000"
}
属性 | 说明 |
---|---|
id | 必需。 它是用户可设置的属性。 它是用来标识该触发器的唯一名称。 ID 不得超过 255 个字符。 |
body | 必需。 它是用户可设置的属性。 它是触发器的主体。 |
triggerOperation | 必需。 它是调用触发器的操作类型。 可接受的值为: All、 Insert、 Replace 和 Delete。 |
triggerType | 必需。 这指定触发触发器的时间。 可接受的值为: Pre 和 Post。 操作 前触发器在操作之前触发,而 Post 在操作后触发。 |
_摆脱 | 它是系统生成的属性。 资源 ID (_rid) 是一个唯一标识符,也是根据资源模型上的资源堆栈分层的。 它可供内部用于放置和导航触发器资源。 |
_ts | 它是系统生成的属性。 它指定资源的上次更新时间戳。 高值是一个时间戳。 |
_自我 | 它是系统生成的属性。 它是资源的唯一可寻址 URI。 |
_Etag | 它是系统生成的属性,用于指定乐观并发控制所需的资源 etag。 |
任务
可以使用触发器执行以下操作:
有关 UDF 的工作原理(包括调用触发器)的信息,请参阅 Azure Cosmos DB 编程:存储过程、触发器和 UDF。