首页 > 解决方案 > 是否可以在触发器内执行跨分区查询?

问题描述

将文档插入文档数据库集合时,我必须实现整数属性的自动增量。我想通过使用预创建触发器来解决这个问题,它只是找到最大值并增加它。这种方法适用于简单的收集,但在使用分区收集时会出现问题:即使在指定{ 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);
    } 
}

那么可以从触发器执行扇出查询吗?

标签: azuretriggersazure-cosmosdbpartitioning

解决方案


与存储过程相同,触发器上下文限制为 1 个分区。更多详细信息:https ://docs.microsoft.com/en-us/azure/cosmos-db/partition-data#design-for-scale (查询边界和事务)


推荐阅读