当前位置: 首页 > 知识库问答 >
问题:

Azure函数无法更新多个Cosmos文档

巩选
2023-03-14
{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 */10 * * * *"
    },
    {
      "name": "DocumentInput",
      "type": "cosmosDB",
      "databaseName": "MyDB1",
      "collectionName": "MyCC1",
      "sqlQuery": "SELECT * FROM c",
      "partitionKey": "/key",
      "connectionStringSetting": "CosmosDBConnectionExp",
      "direction": "in"
    },
    {
      "name": "DocumentOutput",
      "type": "cosmosDB",
      "databaseName": "MyDB1",
      "collectionName": "MyCC1",
      "createIfNotExists": false,
      "partitionKey": "/key",
      "connectionStringSetting": "CosmosDBConnectionExp",
      "direction": "out"
    }
  ]
}
const PushDataChanges = async (context) => {
    
    var cosmosOutput = context.bindings.DocumentOutput;
    var cosmosInput = context.bindings.DocumentInput;
   
    cosmosOutput = cosmosInput;
 

    for(var i = 0; i < cosmosOutput.length; i++) {
   
        var document = cosmosOutput[i];
        var docid = cosmosOutput[i].id;
        var now = new Date().toISOString();

        document.id = docid; //Making sure the id key is same so upsert or update happens.
        document.experiment.lastProcessedTime = "now";
        document.experiment.updateStatus = "This is now updated";
    }

    context.done();

}


module.exports = function (context, Timer) {
    
    context.log('Starting Delta Data Extraction and Sentiment Analysis');
    PushDataChanges(context);
     
};

共有1个答案

朱皓
2023-03-14

这就是我在经历了大量的尝试和错误后终于成功的东西!用于Azure函数的cosmos绑定文档非常少。我花了很多时间从文档中的示例中推断出如何只更新一个文档。下面的代码给出了使用Java脚本通过Azure函数为多个cosmos DB文档更新/upsert的方法。

功能代码:

const PushDataChanges = async (context) => {
    
    var inputdoc = context.bindings.DocumentInput;
   
    for(var i = 0; i < inputdoc.length; i++) {

        console.log(inputdoc.length);

        var now2 = new Date().toISOString();

        inputdoc[i].experiment.updateStatus = "This is updated now";
        inputdoc[i].experiment.lastProcessedTime = now2;
        context.bindings.DocumentOutput = inputdoc;
    }


context.done;
}

module.exports = function (context, Timer) {
    
    context.log('Starting the Azure Function');

    PushDataChanges(context);

    context.done();
     
};

下面是我的绑定:

{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 0 */8 * * *"
    },
    {
      "type": "cosmosDB",
      "name": "DocumentInput",
      "databaseName": "gsk-next-internal-datastore",
      "collectionName": "experiment",
      "sqlQuery": "SELECT * FROM c",
      "connectionStringSetting": "CosmosDBConnectionExp",
      "direction": "in"
    },
    {
      "type": "cosmosDB",
      "name": "DocumentOutput",
      "databaseName": "gsk-next-internal-datastore",
      "collectionName": "experiment",
      "createIfNotExists": false,
      "connectionStringSetting": "CosmosDBConnectionExp",
      "direction": "out"
    }
  ]
}
 类似资料:
  • 当他们在CosmosDB上创建时,我需要用其他文档(type2)的数据更新一些文档(type1)。我决定使用javascript Azure函数和cosmosDBTrigger,无服务器Azure选项。我在绑定表达式来配置functions.json以获取与触发函数的doc-type2相关联的doc-type1时遇到了问题。任何帮助都可能是巨大的。 CosmosDB doc-type1: Cosm

  • 我将数据存储到cosmos DB,如下所示,我想获得每个索引的最新数据。索引的数量是可变的,至少为10个。 (简化文档) 目前,我正在查询索引的数量并显示每个索引的结果。 (仅

  • 我正在编写一些代码,使用Cosmos作为我的存储来实现事件源。我的初始文档成功写入集合。然后,我设置了一个Azure函数,该函数在该集合的提要发生变化时触发,并将项目复制到另一个集合。 我的问题是,虽然如果我在本地调试函数应用程序,这一切都可以正常工作(更改通过并无问题地处理),但函数在作为函数应用程序发布后不会触发。该函数存在,但总执行计数始终为0。就像该函数没有在计时器上运行并检查提要。我的函

  • 我在数据库中有一个集合“documentDev ”,其切分关键字为“dNumber”样本文档: 如果我尝试使用任何查询工具更新这个文档,比如- 它会正确更新文档。但是如果我确实使用了Spring boot的mongorepository命令,如DocumentRepo.save(Object),它会引发异常 由以下原因引起:com.mongodb.MongoCommandException:命令失

  • 因此function.json如下所示: javascript中的http触发器在函数中的作用如下:,但是绑定到输入会导致错误,“property not defined”,那么如何在同一个函数中使用http触发器输入从json数据包中获取一个值来查询第一个输入中的cosmos db呢?

  • 我们试图在我们的一个项目中使用Azure Cosmos DB。基本上,我们会将GROUP BY和ORDER BY子句一起广泛地进行查询。 然而,COSMOS DB索引并未得到有效使用。查询统计数据显示1000 RU/s消耗。 由于我是COSMOS DB的初学者,我不确定行为是否通常。 有人能帮助减少RU/s吗? 查询1 查询 2