DocumentDB更新触发器中的分区键

时间:2017-03-09 17:10:43

标签: azure azure-cosmosdb

我根据记录的当前时间戳以MM / YYYY格式设置分区键。我还有一个PreTrigger,可以在保存记录时更新此值:

function validate() {
    var context = getContext();
    var request = context.getRequest();
    var document = request.getBody();

    var now = new Date(),

    document.PartitionKey = ("0" + (now.getMonth() + 1)).slice(-2) + "/" + now.getFullYear();
    request.setBody(document);
}

但是,我收到以下错误:

One or more errors occurred.Message: {"Errors":["PartitionKey extracted from document doesn't match the one specified in the header"]}

我们是否无法修改触发器中的分区键?

1 个答案:

答案 0 :(得分:1)

不,您无法从触发器内部更改分区键。

这是因为存储过程/触发器在单个分区键的范围内以事务方式执行。由于DocumentDB是分布式数据库,因此需要使用分区键将请求路由到正确的服务器/分区。

执行此操作的最佳方法是在插入期间填充分区键的数据访问层。另外,不建议使用时间戳作为分区键,因为它可能导致热点(通常会在当前时间戳/最近几个小时内访问数据)。