Azure cosmosdb 如何为Cosmos数据库中的每个文档设置字段?

Azure cosmosdb 如何为Cosmos数据库中的每个文档设置字段?,azure-cosmosdb,Azure Cosmosdb,Cosmos存储过程是什么样子的,它会将每个记录的PumperID字段设置为默认值 我们需要这样做来修复一些数据,因此该过程将访问每个具有PumperID字段的记录(并非所有文档都具有该字段),并将其设置为默认值 对于希望迭代容器中的每个项目并更新属性的场景,实现这一点的最佳方法是使用Change Feed处理器并在Azure函数或VM中运行该操作。请参阅以了解更多信息,并从示例开始 使用changefeed,您将希望从容器的开头开始读取它。要做到这一点,请参见 然后,在您的代理中,您将从更改提

Cosmos存储过程是什么样子的,它会将每个记录的PumperID字段设置为默认值

我们需要这样做来修复一些数据,因此该过程将访问每个具有PumperID字段的记录(并非所有文档都具有该字段),并将其设置为默认值


对于希望迭代容器中的每个项目并更新属性的场景,实现这一点的最佳方法是使用Change Feed处理器并在Azure函数或VM中运行该操作。请参阅以了解更多信息,并从示例开始

使用changefeed,您将希望从容器的开头开始读取它。要做到这一点,请参见

然后,在您的代理中,您将从更改提要中读取每个项,检查其值,然后调用ReplaceItemAsync()进行写回(如果需要更新)

static async Task HandleChangesAsync(IReadOnlyCollection<MyType> changes, CancellationToken cancellationToken)
{
    Console.WriteLine("Started handling changes...");
    foreach (MyType item in changes)
    {
        if(item.PumperID == null)
        {
            item.PumperID = "some value"
            //call ReplaceItemAsync(), etc.
        }
    }

    Console.WriteLine("Finished handling changes.");
}
静态异步任务HandleChangesAsync(IReadOnlyCollection更改,CancellationToken CancellationToken)
{
WriteLine(“已开始处理更改…”);
foreach(更改中的MyType项)
{
如果(item.PumperID==null)
{
item.PumperID=“某些值”
//调用ReplaceItemAsync()等。
}
}
控制台.WriteLine(“已完成处理更改”);
}

假设执行一次性数据维护任务,可以说最简单的解决方案是创建一个单一用途的.NET核心控制台应用程序,并使用SDK查询需要更改的项目,然后执行更新。例如,我使用这种方法重命名属性。这适用于任何Cosmos数据库,不需要部署任何存储过程或其他


理想情况下,它被设计为幂等函数,以便在需要多个过程来捕获新数据时可以多次运行。如果项目数量很大,可以选择使用SDK操作在开始时放大吞吐量,在完成时缩小吞吐量。为了提高性能,请在Azure虚拟机或函数上靠近端点运行它。

创建titem的客户端没有设置此选项的任何原因?我更新了我的问题,以进一步澄清我们为什么要这样做。thx!我更新了我的问题,以进一步澄清我们为什么要这样做。我们需要存储过程,明白了。在此场景中,如果要更新此属性的每个实例,则应使用ChangeFeed。我会更新答案。