我根据记录的当前时间戳以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"]}
我们是否无法修改触发器中的分区键?
答案 0 :(得分:1)
不,您无法从触发器内部更改分区键。
这是因为存储过程/触发器在单个分区键的范围内以事务方式执行。由于DocumentDB是分布式数据库,因此需要使用分区键将请求路由到正确的服务器/分区。
执行此操作的最佳方法是在插入期间填充分区键的数据访问层。另外,不建议使用时间戳作为分区键,因为它可能导致热点(通常会在当前时间戳/最近几个小时内访问数据)。