【发布时间】: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