Можно ли выполнить кросс-секционированный запрос внутри триггера? - PullRequest
0 голосов
/ 04 июня 2018

Мне нужно реализовать автоинкремент для целочисленного свойства при вставке документа в коллекцию БД документов.Я хотел решить эту проблему, используя триггер предварительного создания, который просто находит максимальное значение и увеличивает его.Этот подход хорошо работает для простого сбора, но есть проблема при использовании многораздельного: даже после указания { 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 Ответ

0 голосов
/ 04 июня 2018

То же, что и для хранимых процедур, контекст триггера ограничен 1 разделом.Подробнее здесь: https://docs.microsoft.com/en-us/azure/cosmos-db/partition-data#design-for-scale (Граница запроса и транзакции)

...