如何使用 DocumentDB 的 Pre-Trigger on insert 操作 approve/disapprove 插入

How to use DocumentDB's Pre-Trigger on insert operation to approve/disapprove the insertion

我需要在插入 DocumentDB 时创建一个条件 table。 我正在使用 .NET SDK。

当我使用插入操作时,我想将文档与其余文档进行比较,并且仅当没有其他文档在特定字段中包含相同值时才批准插入。

其他选项是将一列定义为唯一的,只是在我的例子中是两列应该是唯一的。

这是我创建的触发器,由于某种原因它没有阻止 INSERT 操作。

要比较的字段是 "ApplicationSession" 和 "OperationCounter"

function UniqueAppSessionAndCounter() {
var collection = getContext().getCollection();
var request = getContext().getRequest();
var docToCreate = request.getBody();


if (!docToCreate.ApplicationSession || docToCreate.ApplicationSession == ""
    || !docToCreate.OperationCounter || docToCreate.OperationCounter == 0) {
    throw new Error('Application session and Counter is a must');
}


var filterQuery = 'SELECT * FROM r WHERE r.ApplicationSession = "'
                      + docToCreate.ApplicationSession + '" AND r.OperationCounter = '
                      + docToCreate.OperationCounter;
collection.queryDocuments(collection.getSelfLink(), filterQuery
   , function (err, docs, options) {
       if (docs.length > 0) {
           throw new Error('Application session and Counter must be unique');
       }
   });}

您确定调用 CreateDocumentAsync 时正在执行触发器吗?

在 DocumentDB 中,触发器不会像您预期的那样自动执行。 这是因为您经常将不同的文档放入一个集合中,并且您可能需要针对不同类型的文档使用不同的触发器。

要在创建文档时执行文档,请确保按如下方式指定包含触发器:

CreateDocumentAsync(coll_link, 
    new {foo: "bar"}, 
    new RequestOptions {IncludePreTrigger = "TriggerName"});