Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure Cosmos DB-使用附加字段更新现有文档_Azure_Azure Cosmosdb - Fatal编程技术网

Azure Cosmos DB-使用附加字段更新现有文档

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

现有Cosmos DB文档需要使用新属性进行更改/更新,其他集合的现有文档也需要使用相同的新属性及其值进行更新

是否有任何推荐的方法或工具可用于更新Cosmos DB上的现有文档,或者使用Cosmos DB SDK编写自定义c#应用程序/PowerShell脚本是唯一的选择

例如:

现有
用户
文档

{
身份证件: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美元”
}  
我可能会选择:


  • 通过脚本更新用户文档
  • 使用带有Cosmosdb触发器的Azure功能,可以监听用户文档上的更改并适当更新订单
  • [更新] 无论您觉得最适合使用哪种类型的脚本:PS、C#、Azure函数。。。 现在,什么意思是他们需要改变与新的财产“在同一时间”?我不确定这在任何方面都是可能的。如果你想要这样的效果,我想你最好的选择是:

  • 为用户创建新集合/容器
  • 拥有一个Azure函数,用于侦听现有用户容器的更改源(因此,使用StartFromStart选项)
  • 更新文档,使其具有新字段,并将其存储在新创建的容器中
  • 完成后,将应用程序切换为使用新容器
  • 您可以选择如何更改其他集合(订单):使用来自旧用户或新用户容器的changeFeed和Azure函数

    附言。
    是的,无论我使用什么流,它仍然是带有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触发器一起使用的建议。但仍然在寻找选择。