你当前正在访问 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 必需。 它是调用触发器的操作类型。 可接受的值为: AllInsertReplaceDelete。
triggerType 必需。 这指定触发触发器的时间。 可接受的值为: PrePost操作 前触发器在操作之前触发,而 Post 在操作后触发。
_摆脱 它是系统生成的属性。 资源 ID (_rid) 是一个唯一标识符,也是根据资源模型上的资源堆栈分层的。 它可供内部用于放置和导航触发器资源。
_ts 它是系统生成的属性。 它指定资源的上次更新时间戳。 高值是一个时间戳。
_自我 它是系统生成的属性。 它是资源的唯一可寻址 URI。
_Etag 它是系统生成的属性,用于指定乐观并发控制所需的资源 etag。

任务

可以使用触发器执行以下操作:

有关 UDF 的工作原理(包括调用触发器)的信息,请参阅 Azure Cosmos DB 编程:存储过程、触发器和 UDF

另请参阅