Cosmos Db Trigger не запускается при вставке нового документа - PullRequest
2 голосов
/ 01 апреля 2020

Я использую Azure Cosmos DB. Я создал простой триггер в портале Azure следующим образом:

enter image description here

  var context = getContext();
  var request = context.getRequest();

  // item to be created in the current operation
  var itemToCreate = request.getBody();
  itemToCreate["address"] = "test";

  // update the item that will be created
  request.setBody(itemToCreate);

К сожалению, этот триггер не запускается при вставке новых документов , Я также попытался установить «Тип триггера» на «Опубликовать». Я что-то упустил?

Ответы [ 3 ]

3 голосов
/ 01 апреля 2020

Отличный вопрос! Я всегда думал, что триггеры будут запускаться автоматически:).

Я считаю, что триггеры не запускаются автоматически при вставке документа. Что вам нужно сделать, это указать триггер, который вы хотите запустить при создании документа.

Вам нужно зарегистрировать триггер, передав имя триггера в качестве опции запроса при отправке create запрос документа.

Например, см. код здесь: https://docs.microsoft.com/en-us/azure/cosmos-db/how-to-use-stored-procedures-triggers-udfs#pre -triggers (также скопировано ниже). Обратите внимание на использование PreTriggerInclude в RequestOptions:

dynamic newItem = new
{
    category = "Personal",
    name = "Groceries",
    description = "Pick up strawberries",
    isComplete = false
};

Uri containerUri = UriFactory.CreateDocumentCollectionUri("myDatabase", "myContainer");
RequestOptions requestOptions = new RequestOptions { PreTriggerInclude = new List<string> { "trgPreValidateToDoItemTimestamp" } };
await client.CreateDocumentAsync(containerUri, newItem, requestOptions);
2 голосов
/ 01 апреля 2020

Запуск триггеров автоматически в реляционных базах данных имеет смысл, так как в базе данных есть схема, вы знаете, что обрабатывать в триггере c. В базе данных No SQL, поскольку схемы нет, вы можете получить большой скрипт для обработки всех видов исключений. Большой сценарий в триггерах означает более высокие счета в облаке. Автоматическое создание триггеров c может значительно увеличить счета многих клиентов, особенно в решениях IOT. Вы можете прочитать о Azure триггерах до и после запуска Cosmos DB в моем посте. https://h-savran.blogspot.com/2020/03/create-triggers.html

0 голосов
/ 02 апреля 2020

Единственный способ, согласно ответам @Guarav Mantri и @Hasan Savaran, - указать триггер при создании элемента через API. Мне удалось сделать это в Java Azure SDK следующим образом:

 RequestOptions options = new RequestOptions();
 options.setPreTriggerInclude(Arrays.asList("pre"));
 documentClient.createDocument(
                    collectionLink(),
                    documentToAdd,
                    options,
                    true);

Хотя я не доволен этим решением, потому что, например, триггер не будет срабатывать при создании элемента через портал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...