如何使用 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"});
我需要在插入 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"});