Триггер Azure CosmosDB для обновления коллекции на основе значения в другой коллекции

Мне нужно обновить коллекцию cosmosDB (пусть будет коллекция-1) на основе значения столбца в другой коллекции cosmosDB (пусть будет коллекция-2). Коллекция-1 должна быть обновлена ​​значениями из других коллекций, таких как collection-3 и collection-4. Я попытался написать триггер сообщения в Коллекции-2, но застрял при написании функции внутри триггера.

Пожалуйста, подскажите, возможно ли это с помощью CosmosDB Trigger, или предложите, есть ли какой-либо альтернативный способ добиться этого.

Я создал новую функцию триггера для cosmos DB.


person Antony    schedule 03.06.2019    source источник
comment
если вы хотите выполнить привязку к нескольким коллекциям в одной функции Azure, вы можете сделать это с помощью stackoverflow.com/questions/39855409/   -  person Alex Gordon    schedule 03.06.2019


Ответы (2)


Насколько мне известно, вы можете отслеживать обновления только одной коллекции cosmos db в каждом Триггер функции Azure CosmosDB.

Другими словами, если обновления столбцов в Collection-1 определяются обновлениями Collection 2,3,4, для этой цели необходимо создать 3 триггера.

В каждом триггере следуйте этому document, чтобы настроить информацию о коллекции и использовать Cosmos DB SDK для замены конкретного документа.


Обновить ответ:

Полностью согласен с объяснениями в комментарии @Matias Quaranta, вы перепутали здесь два типа триггеров. Как вы упомянули, безусловно, необходимо принять триггер функции Azure. Триггер Cosmos DB не может отслеживать обновления в вашей коллекции, он запускается пассивно.

Например:

Если вы хотите добавить один столбец перед вставкой документов в cosmos db, вы можете установить имя триггера, чтобы активировать его при использовании вставки документа cosmos db sdk. Это триггер под космосом.

Если вы хотите отслеживать обновления своей коллекции cosmos db, то для некоторых предприятий необходимо принять Azure Function Trigger.

person Jay Gong    schedule 03.06.2019
comment
Коллекция ›› Триггеры - совсем другое дело, это эти триггеры. Эти триггеры имеют аналогичную концепцию триггерам таблиц SQL Server. Триггер функций Azure Cosmos DB - это бессерверный компонент, который позволяет создавать функции Azure, которые запускаются всякий раз, когда в вашей коллекции появляются новые данные: docs.microsoft.com/azure/cosmos-db/change-feed-functions - person Matias Quaranta; 04.06.2019
comment
@Antony Пожалуйста, обратитесь к моему обновленному ответу и комментариям Матиаса. - person Jay Gong; 04.06.2019
comment
спасибо @Jay Gong. Я создал триггер функции и работает нормально. - person Antony; 07.06.2019
comment
@Antony: Отлично, ты мог бы отметить ответ, чтобы положить конец этому делу. Хорошего дня. - person Jay Gong; 07.06.2019
comment
@Matias Quaranta: можем ли мы активировать эту функцию явно для создания и обновления данных? - person Antony; 12.06.2019
comment
@Antony нет, триггер срабатывает как для операций вставки, так и для операций замены. - person Matias Quaranta; 12.06.2019
comment
@ Матиас Каранта. Я создал функцию триггера для коллекции cosmosDB и получаю из нее данные в качестве входных данных для функции и обновляю те же данные в другой коллекции. Но я не получаю столбцы с нулевыми значениями на входе. Это ожидаемое поведение? Или все столбцы, включая нулевое значение, должны быть доступны в качестве входных данных для функции? - person Antony; 13.06.2019
comment
@JayGong Я создал функцию триггера для коллекции cosmosDB и получаю из нее данные в качестве входных данных для функции и обновляю те же данные в другой коллекции. Но я не получаю столбцы с нулевыми значениями на входе. Это ожидаемое поведение? Или все столбцы, включая нулевое значение, должны быть доступны в качестве входных данных для функции? - person Antony; 13.06.2019
comment
@Antony, вы сопоставляете документы с определенным классом, прежде чем сохранять их в другую коллекцию? Содержит ли ваш класс конфигурации JsonAttribute, чтобы специально не игнорировать нулевые значения? - person Matias Quaranta; 13.06.2019
comment
@MatiasQuaranta Я делаю это только с портала Azure. И я нигде не упоминаю, чтобы игнорировать нулевые значения. - person Antony; 14.06.2019
comment
Думаю, это место не совсем подходящее место для устранения неполадок, поскольку это тоже другой вопрос. Не могли бы вы создать новый вопрос и, если возможно, добавить свой код триггера и образец документа, а также то, как вы читаете атрибуты? - person Matias Quaranta; 14.06.2019

Меня смутила коллекция >>> trigger и функция Azure Cosmos DB Trigger. Решение для моего вышеупомянутого вопроса - создать функцию Azure для запуска cosmos DB.

Создайте ресурс >>> Compute >>> Function App.

для добавления ввода и вывода перейдите к опции «Интегрировать» в приложении-функции >>> Триггер, который вы создали.

Ссылка для привязки функции:

Эта функция запускается при обновлении данных в одной коллекции cosmosDB. Мы можем добавить n коллекций в качестве входных данных и коллекцию в качестве выходных.

Ниже приведен файл function.json, который будет автоматически создан во время определения привязок:

{
  "bindings": [
    {
      "type": "cosmosDBTrigger",
      "name": "documents",
      "direction": "in",
      "leaseCollectionName": "leases",
      "connectionStringSetting": "cosmosdb_DOCUMENTDB",
      "databaseName": "connectivityDB",
      "collectionName": "tblEvent",
      "createLeaseCollectionIfNotExists": true
    },
    {
      "type": "cosmosDB",
      "name": "outputDocument",
      "databaseName": "connectivityDB",
      "collectionName": "tblNewEvent",
      "createIfNotExists": true,
      "connectionStringSetting": "cosmosdb_DOCUMENTDB",
      "partitionKey": "/id",
      "direction": "out"
    }
  ]
}

Ниже создан файл index.js:

module.exports = function(context, input) {

     var documents = context.bindings.documents;
     var output = [];

     if(!!input && input.length > 0){

       //write your code here

     }

    context.bindings.outputDocument = output;
    context.done();
}
person Antony    schedule 07.06.2019