我需要在插入DocumentDB表时创建一个条件。 我使用的是.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');
}
});}
答案 0 :(得分:2)
您是否确定在调用CreateDocumentAsync时正在执行触发器?
在DocumentDB中,触发器执行不像您期望的那样自动执行。 这是因为您经常将不同的文档放入单个集合中,并且您可能需要针对不同类型的文档使用不同的触发器。
要在创建文档时执行文档,请确保指定包含触发器,如下所示:
CreateDocumentAsync(coll_link,
new {foo: "bar"},
new RequestOptions {IncludePreTrigger = "TriggerName"});