在使用SQL时,如何更改CosmosDB中文档或文档集的结构?
例如,您应该如何改变这种情况:
{
"id": "some-id",
"StudentId": "some@email.address",1
// etc.对此:
{
"id": "some-id",
"StudentEmail": "some@email.address",
// etc.值得注意的是,经常用于更改数据库中项的结构的一个词是“迁移”。然而,在CosmosDB文献中,这个词似乎只用于将数据移动到CosmosDB数据库的行为。
发布于 2020-03-19 09:36:19
因此,Cosmos DB SQL API不支持部分文档更新。您需要对整个文档进行replace。您需要做的是获取文档,进行更改,然后替换项目。
您可以在这里找到相同的示例代码:https://github.com/Azure/azure-cosmos-dotnet-v3/blob/master/Microsoft.Azure.Cosmos.Samples/Usage/ItemManagement/Program.cs。在相同的链接中,下面是替换文档的代码:
private static async Task ReplaceItemAsync(SalesOrder order)
{
//******************************************************************************************************************
// 1.5 - Replace a item
//
// Just update a property on an existing item and issue a Replace command
//******************************************************************************************************************
Console.WriteLine("\n1.5 - Replacing a item using its Id");
order.ShippedDate = DateTime.UtcNow;
ItemResponse<SalesOrder> response = await container.ReplaceItemAsync(
partitionKey: new PartitionKey(order.AccountNumber),
id: order.Id,
item: order);
SalesOrder updated = response.Resource;
Console.WriteLine($"Request charge of replace operation: {response.RequestCharge}");
Console.WriteLine($"Shipped date of updated item: {updated.ShippedDate}");
order.ShippedDate = DateTime.UtcNow;
using (Stream stream = Program.ToStream<SalesOrder>(order))
{
using (ResponseMessage responseMessage = await container.ReplaceItemStreamAsync(
partitionKey: new PartitionKey(order.AccountNumber),
id: order.Id,
streamPayload: stream))
{
// Item stream operations do not throw exceptions for better performance
if (responseMessage.IsSuccessStatusCode)
{
SalesOrder streamResponse = FromStream<SalesOrder>(responseMessage.Content);
Console.WriteLine($"\n1.5.2 - Item replace via stream {streamResponse.Id}");
}
else
{
Console.WriteLine($"Replace item from stream failed. Status code: {responseMessage.StatusCode} Message: {responseMessage.ErrorMessage}");
}
}
}
}在替换时,请记住id和partition key值都不应更改。如果任何值发生变化,将创建一个新文档。
https://stackoverflow.com/questions/60753820
复制相似问题