是否可以在触发器内执行跨分区查询?
Is it possible to execute cross-partitioned query inside trigger?
在将文档插入文档数据库集合时,我必须实现整数 属性 的自动递增。我想通过使用预创建触发器来解决这个问题,它只找到最大值并递增它。这种方法适用于简单的收集,但在使用分区收集时会出现问题:即使在指定 { enableCrossPartitionQuery: true }
之后,我的查询也仅限于我插入文档的分区。
function trigger(){
var context = getContext();
var collection = context.getCollection();
var request = context.getRequest();
// document to be created in the current operation
var documentToCreate = request.getBody();
//query for max value
var filterQuery = 'SELECT value MAX(r.Id) FROM root r';
var result = collection.queryDocuments(collection.getSelfLink(), filterQuery,
{ enableCrossPartitionQuery: true }, callback);
function callback(err, documents, responseOptions) {
if(err) throw new Error("Error" + err.message);
var maxId = documents[0] || 0;
documentToCreate["Id"] = ++maxId;
request.setBody(documentToCreate);
}
}
所以可以从触发器执行扇出查询?
与存储过程相同,触发上下文仅限于 1 个分区。
此处有更多详细信息:https://docs.microsoft.com/en-us/azure/cosmos-db/partition-data#design-for-scale(查询边界和事务)
在将文档插入文档数据库集合时,我必须实现整数 属性 的自动递增。我想通过使用预创建触发器来解决这个问题,它只找到最大值并递增它。这种方法适用于简单的收集,但在使用分区收集时会出现问题:即使在指定 { enableCrossPartitionQuery: true }
之后,我的查询也仅限于我插入文档的分区。
function trigger(){
var context = getContext();
var collection = context.getCollection();
var request = context.getRequest();
// document to be created in the current operation
var documentToCreate = request.getBody();
//query for max value
var filterQuery = 'SELECT value MAX(r.Id) FROM root r';
var result = collection.queryDocuments(collection.getSelfLink(), filterQuery,
{ enableCrossPartitionQuery: true }, callback);
function callback(err, documents, responseOptions) {
if(err) throw new Error("Error" + err.message);
var maxId = documents[0] || 0;
documentToCreate["Id"] = ++maxId;
request.setBody(documentToCreate);
}
}
所以可以从触发器执行扇出查询?
与存储过程相同,触发上下文仅限于 1 个分区。 此处有更多详细信息:https://docs.microsoft.com/en-us/azure/cosmos-db/partition-data#design-for-scale(查询边界和事务)