Azure Cosmos DB-使用附加字段更新现有文档
现有Cosmos DB文档需要使用新属性进行更改/更新,其他集合的现有文档也需要使用相同的新属性及其值进行更新 是否有任何推荐的方法或工具可用于更新Cosmos DB上的现有文档,或者使用Cosmos DB SDK编写自定义c#应用程序/PowerShell脚本是唯一的选择 例如: 现有Azure Cosmos DB-使用附加字段更新现有文档,azure,azure-cosmosdb,Azure,Azure Cosmosdb,现有Cosmos DB文档需要使用新属性进行更改/更新,其他集合的现有文档也需要使用相同的新属性及其值进行更新 是否有任何推荐的方法或工具可用于更新Cosmos DB上的现有文档,或者使用Cosmos DB SDK编写自定义c#应用程序/PowerShell脚本是唯一的选择 例如: 现有用户文档 { 身份证件:user1@mail.com, 名称:“abc”, 国家:“xyz” } 更新了用户文档 { 身份证件:user1@mail.com, 名称:“abc”, 国家:“xyz”, gui
用户
文档
{
身份证件:user1@mail.com,
名称:“abc”,
国家:“xyz”
}
更新了用户
文档
{
身份证件:user1@mail.com,
名称:“abc”,
国家:“xyz”,
guid:“4334fdfsfewr”//new字段
}
用户的现有订单
文档
{
身份证件:user1@mail.com,
用户:“user1@mail.com",
日期:“2020年9月28日”,
金额:“45美元”
}
更新了用户的订单
文档
{
身份证件:user1@mail.com,
用户:“user1@mail.com",
userid:“4334fdfsfewr”,//新字段,但与用户模型中的值相同
日期:“2020年9月28日”,
金额:“45美元”
}
我可能会选择:
是的,无论我使用什么流,它仍然是带有Cosmos DB触发器的Azure函数。我为.Net Core API 3.0或更高版本添加了一些解决方案
// You can put any filter for result
var result = _containers.GetItemLinqQueryable<MessageNoteModel>().Where(d => d.id == Id
&& d.work_id.ToLower() == workId.ToLower()).ToFeedIterator();
if (result.HasMoreResults)
{
var existingDocuments = result.ReadNextAsync().Result?.ToList();
existingDocuments.ForEach(document =>
{
//Creating the partition key of the document
var partitionKey = new PartitionKey(document?.work_id);
document.IsConversation = true;
//Inserting/Updating the message in to cosmos db collection: Name
_containers.Twistle.ReplaceItemAsync(document, document.document_id, partitionKey);
});
}
//您可以为结果放置任何筛选器
var result=\u containers.GetItemLinqQueryable()。其中(d=>d.id==id
&&d.work_id.ToLower()==workId.ToLower()).ToFeedIterator();
if(result.HasMoreResults)
{
var existingDocuments=result.ReadNextAsync().result?.ToList();
existingDocuments.ForEach(文档=>
{
//创建文档的分区键
var partitionKey=新的partitionKey(文档?.work\u id);
document.IsConversation=true;
//在cosmos db集合中插入/更新消息:Name
_containers.Twistle.ReplaceItemAsync(document、document.document\u id、partitionKey);
});
}
通过脚本更新用户文档,您是指PS脚本吗?现有的cosmos db帐户有大约100000个用户文档和“n”个订单文档,Azure功能和Cosmosdb触发器是否仍然有效?假设所有100000个用户文档必须同时使用新属性进行更改。我不明白如何根据OPs的一般问题决定Azure Functions+Cosmos DB触发器。实际上没有具体的方法来完成这项任务。@DavidMakogon也许我遗漏了什么,但他正在向用户文档中插入guid。是什么阻止他生成guid并将其插入azure函数中?@deezg-我不是说他们不能使用azure函数。但是你的答案是它应该是一个Azure函数。我是说,没有确切的方式来表达这一点。@DavidMakogon我很确定我从来没有提到过像“应该”这样的东西。实际上,我的帖子是以“我可能会同意”开头的。所以,我提出了一种解决方案,这种解决方案在类似的任务中非常常见,cosmos db团队经常推荐用于类似的任务。不知道你到底想说什么。人类并没有要求单一的、确定的、确定的方式。他要求推荐。我敢肯定,十分之九的cosmos db用户会推荐azure functions+cosmos db trigger。这方面没有特定的工具,因为您需要在每个文档中添加特定的数据。似乎您需要编写代码来完成此操作(并且每个受支持的语言SDK都支持用更新的文档替换文档)。还有各种Azure服务,例如Azure数据工厂,但是。。。您仍然需要注入特定的数据,并且需要知道如何修改文档。如何选择这一点实际上取决于您-没有具体的方法。可能重申我的要求会有所帮助,我希望使用新属性“Guid”更新集合中的所有现有文档,并且这些更改还必须传播到同一cosmos db帐户中的其他特定现有模型。想知道Azure Data Factory将如何用于此需求?我同意@deezg关于将Azure函数与Cosmosdb触发器一起使用的建议。但仍然在寻找选择。