如何在Azure函数中插入/更新CosmosDB中的数据

时间:2018-04-18 19:15:15

标签: azure-functions azure-cosmosdb

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

解析文件会生成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);
  }
}

1 个答案:

答案 0 :(得分:1)

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

ICollector<Car>对于这种情况应该没问题。