gpt4 book ai didi

azure-cosmosdb - 在惰性索引集合上创建具有自动 ID 生成的文档时出现冲突错误 (409)

转载 作者:行者123 更新时间:2023-12-01 06:03:08 25 4
gpt4 key购买 nike

我将 DocumentDB 与 .NET SDK 一起使用在我使用 IndexingMode.Lazy 设置自定义索引策略的集合上.这为我提供了集合上所有操作的最终一致性。

我想对非关键数据进行类似 upsert 的操作:我可以承受重复和错过的更新。

我使用这样的代码:

public async Task UpsertChunk(MyChunk chunk)
{
var id = _documentClient
.CreateDocumentQuery<PersistentChunk>()
.Where(c => c.ChunkKey == chunk.ChunkKey)
.Select(c => c.id)
.FirstOrDefault();

var persistentChunk = chunk.ToPersistentChunk();
if (string.IsNullOrEmpty(id))
{
await _documentClient.CreateDocumentAsync(_collectionUri, persistentChunk);
}
else
{
persistentChunk.id = id;
var uri = UriFactory.CreateDocumentUri(_databaseId, _collectionId, id);
await _documentClient.ReplaceDocumentAsync(uri, persistentChunk);
}
}

我得到,不一致, 冲突错误 : Microsoft.Azure.Documents.DocumentClientException: Message: {"Errors":["Resource with specified id or name already exists"]}
但是,由于我使用 自动生成 ID ,即使在并发写入的情况下,也不应该有重复的 ID。

有没有人遇到过这种行为?
我怀疑如果 DocumentDB 未确认成功写入,则这可能由 .NET SDK 执行的重试触发。

最佳答案

Conflict errors : Microsoft.Azure.Documents.DocumentClientException: Message: {"Errors":["Resource with specified id or name already exists"]}



409 Conflict指示为 PUT 或 POST 操作中的资源提供的 ID 已被现有资源占用。请尝试通过 查询文档id 属性 而不是 ChunkKey 属性 ,然后根据查询结果 num决定添加/替换文档.
var num = client.CreateDocumentQuery<MyChunk>("dbs/{your db}/colls/{your collection}").Where(c => c.id == chunk.id).AsEnumerable().Count();

关于azure-cosmosdb - 在惰性索引集合上创建具有自动 ID 生成的文档时出现冲突错误 (409),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43049644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com