假设我的文件中有数据代表汽车经销商当前(巨大)独特(由一些标准)汽车的库存,并且每天生成一个新文件,反映每辆汽车的库存和价格等。
解析文件会生成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);
}
}
答案 0 :(得分:1)
要复制文档,请将Car
类更改为其中包含id
属性,并将其设置为唯一的汽车标识符。
ICollector<Car>
对于这种情况应该没问题。