首页 > 解决方案 > 在 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 );
            
        }
    }
}

标签: azure-functionsazure-cosmosdb

解决方案


推荐阅读