azure-functions - 在 Azure Function 中使用 changeFeed 迁移 cosmos Db
问题描述
下面是我编写的代码,用于将我的一个集合迁移到同一个 Cosmos 数据库中的另一个集合中。我想知道如何优化它并使用“源”而不是创建客户端和集合 uri 等等。我相信有办法做到这一点。我必须使用更改提要并对那些具有“classID”作为属性的文档感兴趣。
public static class Function1
{
[FunctionName("Function1")]
public static async Task Run([CosmosDBTrigger(
databaseName: "databaseName",
collectionName: "collectionName",
StartFromBeginning = true,
ConnectionStringSetting = "",
LeaseCollectionName = "leases",
CreateLeaseCollectionIfNotExists = true
)] IReadOnlyList<Document> source,
ILogger log )
{
DocumentClient client = new DocumentClient( new Uri( "endpointUrl" ), "authorizationKey" );
string continuationToken = null;
string collectionUrl = UriFactory.CreateDocumentCollectionUri( "databaseName", "SourceCollection" ).ToString();
do
{
var feed = client.CreateDocumentQuery(
collectionUrl,
new SqlQuerySpec( "select * FROM c WHERE IS_DEFINED(c.ClassId)" ),
new FeedOptions { MaxItemCount = 10, EnableCrossPartitionQuery = true, RequestContinuation = continuationToken } ).AsDocumentQuery();
var result = feed.ExecuteNextAsync().Result;
var itemCount = result.Count;
continuationToken = result.ResponseContinuation;
foreach( var doc in result )
{
var data = (JObject)JsonConvert.DeserializeObject( doc.ToString() );
string partitionkeyValue = string.Concat( data["ClassId"].Value<string>(), "|", data["Project"].Value<string>() );
data.Add( new JProperty( "PartitionKey", partitionkeyValue ) );
await client.CreateDocumentAsync( UriFactory.CreateDocumentCollectionUri(
"SourceDatabase", "TargetCollection" ),
data );
}
}
while( continuationToken != null );
}
}
}
解决方案
推荐阅读
- wordpress - Wordpress - 自定义帖子类型列没有价值
- spring-boot - Kafka Schema Registry 出现错误意外字符('<'(代码 60)):预期有效值(数字、字符串、数组、对象、'true'、'false')
- reactjs - ReactJS - 如何更改不同组件中的路线?
- swift - App Extension 无法识别私有框架
- ios - “用户”类型的值没有下标
- django - 模板中不提供 Django 自定义表单字段属性
- php - “1064 - 您的 SQL 语法有错误”当 LOAD DATA INFILE 使用字段规范时
- kurento - 为什么 kurento 媒体服务器与 ant-media 相比表现不佳?
- c++ - C++ EXC_BAD_INSTRUCTION?
- google-cloud-platform - 如何使 gsutil 自动完成更快或禁用自动完成