How update collections using Azure functions

大兔子大兔子 提交于 2019-12-11 16:05:16

问题


I want to create the azure Function which is bind to cosmos DB.

  • Whenever some insertion happens in "A" collection I want to update "B" collection.
  • "B" collection has stored procedure which I want to call after the insertion in collection "A".

I am new to Azure and cosmos-DB.

Suggest me what need to be done to accomplish the requirement.

So far I have created Azure Function

Also Updated the function.json with below code.

{
  "bindings": [
    {
      "type": "cosmosDBTrigger",
      "name": "input",
      "direction": "in",
      "leaseCollectionName": "leases",
      "connectionStringSetting": "cdb-swm-dev-001_DOCUMENTDB",
      "databaseName": "admin",
      "collectionName": "aomsorders",
      "createLeaseCollectionIfNotExists": true
    },
    {
      "type": "documentDB",
      "name": "inputDocument",
      "databaseName": "admin",
      "collectionName": "aomsorders",
      "connection": "cdb-swm-dev-001_DOCUMENTDB",
      "direction": "in"
    },
    {
      "type": "documentDB",
      "name": "outputDocument",
      "databaseName": "admin",
      "collectionName": "test",
      "createIfNotExists": true,
      "connection": "cdb-swm-dev-001_DOCUMENTDB",
      "direction": "out"
    }
  ],
  "disabled": false
}

Also Updated the Integrate Part as below

Any Suggestion will be appreciable.


回答1:


I find your question not very specific, but broadly you have at least two options:

  • Insert to both collections from the same Azure Function

  • Insert to the collection 1 from the first Azure Function, then have a second Azure Function with Cosmos DB trigger listening to the changes of collection 1 and updating collection 2

I'm sure there are other options too.




回答2:


Here is an example of an Azure Function that gets triggered by a CosmosDBTrigger and then it uses a DocumentDB Output Binding to write to a second collection:

function.json

{
  "bindings": [
    {
      "type": "cosmosDBTrigger",
      "name": "input",
      "direction": "in",
      "databaseName": "your-database",
      "collectionName": "your-collection1",
      "connectionStringSetting": "name-of-connectionstring-setting-for-collection1",
      "leaseCollectionName": "your-lease-collection"
    },
    {
      "type": "documentDB",
      "direction": "out",
      "name": "docsToSave",
      "databaseName": "your-database2",
      "collectionName": "your-collection2",
      "connection": "name-of-connectionstring-setting-for-collection2",
      "createIfNotExists": false
    }
  ]
}

run.csx (C#)

#r "Microsoft.Azure.Documents.Client"
using Microsoft.Azure.Documents;
using System.Collections.Generic;
using System;
public static async Task Run(IReadOnlyList<Document> input, IAsyncCollector<Document> docsToSave)
{
    foreach(var doc in input){
        // Do something here, process the document or do your compute
        // Here I am saving the same document to the second collection but you could send a new document created within the processing logic or send the same document modified by some logic
        await docsToSave.AddAsync(doc);
    }
}

index.js (NodeJS)

module.exports = function(context, input) {
    if(!!input && input.length > 0){
        context.bindings.docsToSave = [];
        for(var i = 0, len=input.length; i<len;i++){
            var doc = input[i];
            // Do something here with the doc or create a new one
            context.bindings.docsToSave.push(doc);
        }
    }
    context.done();
}


来源:https://stackoverflow.com/questions/47693260/how-update-collections-using-azure-functions

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!