У меня есть структура ниже в коллекции Cosmos (где эта структура не будет изменена)
{
"attribute1": "",
"attribute2": "",
"attribute3": "11181",
"attribute4": "Text value",
"companies": [
{
"companyId": "Guid",
"companyName": "Value"
}
],
"id": "ec4c18d9-178d-43d4-a2b0-093b160bfd06"
}
У меня есть процесс, который изменяет список компаний
Есть ли способ запустить оператор «ОБНОВЛЕНИЕ» в Cosmos для обновления только списка компаний?
Текущая реализация, показанная ниже, занимает 1 минуту, что намного дольше, чем мне хотелось бы
public void RandomizeCompanies()
{
foreach (var item in _items)
{
//Clear companies list and add random elements to the list
}
}
public async Task ChangeCompaniesAsync()
{
await ConnectToDatabaseAsync();
await GetItemsFromCosmosAsync().ConfigureAwait(false);
RandomizeCompanies();
try
{
Console.WriteLine($"Starting...");
var stopwatch = Stopwatch.StartNew();
var tasks = new List<Task>(_items.Count);
foreach (var item in _items)
{
tasks.Add(_cosmosConnection.Container.UpsertItemAsync(item, new PartitionKey(item.Id)));
}
await Task.WhenAll(tasks);
stopwatch.Stop();
Console.WriteLine($"Finished writing {_items.Count} items in {stopwatch.Elapsed}.");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
finally
{
Console.WriteLine("Cleaning up resources...");
}
}
}
Что-то вроде
var tasks = new List<Task>(_items.Count);
foreach (var item in _items)
{
tasks.Add( Run update statement that updates companies list to be items.Companies );
}
await Task.WhenAll(tasks);
Текущая реализация не идеальна, потому что я сериализую весь документ, хотя изменяется только небольшая часть
Пол