【问题标题】:How can I insert/update data in CosmosDB in an Azure function如何在 Azure 函数中插入/更新 CosmosDB 中的数据
【发布时间】:2018-09-29 03:36:13
【问题描述】:

假设我有一个文件中的数据代表汽车经销商当前(大量)独特(按某些标准)汽车的库存,并且每天生成一个新文件,反映每辆汽车的库存和价格等。

解析文件会生成Car 对象的列表。 每辆车的唯一性在 Car 对象中通过某个值表示,这将是常规 rdbms 设置中唯一键的基础。

我希望 CosmosDB 中的数据成为文件中数据的可查询版本。它应该只保存最新解析文件中的数据,而不是以前文件中的数据。

我有一个 Azure 函数,可以在文件上传到 Blob 存储时对其进行解析,并将解析后的数据插入 CosmosDB。但是,这种插入只会随着时间的推移而使用无价值的数据扩大数据库。


  • 如何对已解析的 Car 对象进行 UPSERT 而不是总是插入它们?

  • 是否可以将 upsert 声明为部分 azure 函数而不是 ICollector<Car>?

我猜 CosmosDB 可以用作 Azure 函数的输入,并将那里的 Car 对象与文件中的对象进行比较,并在必要时更新/插入,但如果 CosmosDB 或 Azure 函数有一个整洁的函数,我会更喜欢实现这一目标的方法。


Azure 函数:

[FunctionName("ParseCarsFromFile")]
public static void Run(
  [BlobTrigger("data", Connection = "StorageConnection")] TextReader textReader,
  [CosmosDB("data", "car", ConnectionStringSetting ="CosmosDb", CreateIfNotExists = true)] ICollector<Car> documentOutputBinding)
{
  var cars = CarsFileParser.Parse(textReader);

  foreach (var car in cars)
  {
      documentOutputBinding.Add(car);
  }
}

【问题讨论】:

  • Cosmos 中的文档 ID 是什么?是 Car id 还是自动生成的?
  • 它是自动生成的。它可以是汽车 id 并且仍然是 og 类型的汽车吗?

标签: azure-functions azure-cosmosdb


【解决方案1】:

要插入文档,请将您的 Car 类更改为包含 id 属性,并将其设置为唯一的汽车标识符。

ICollector&lt;Car&gt; 在这种情况下应该没问题。

【讨论】:

  • 谢谢。我通过创建一个名为id(小写)、类型为string 的属性来让它工作。我无法让后者工作,id 仍然是我无法控制的指南。
  • @kasperhj 我可能误解了这些例子......我稍后会自己尝试,从答案中删除这个选项,直到我证明它有效。
猜你喜欢
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 2019-11-01
  • 1970-01-01
  • 2019-01-13
相关资源
最近更新 更多