确定Cosmos DB NotFound是否由于缺少集合与文档

问题描述 投票:0回答:1

有没有办法以编程方式从DocumentClientException确定StatusCode == HttpStatusCode.NotFound是文档,集合还是未找到的数据库?

我正在试图弄清楚我是否可以实现按需收集配置,并且只在需要时调用DocumentClient.CreateDocumentCollectionIfNotExistsAsync。我试图避免在发出每个请求之前调用它(可能这会为每个请求添加额外的网络往返)。同样,当我知道它无济于事时,我试图避免在错误恢复时调用它。

从本地模拟器的实验中,我发现在这三种情况下看到的唯一字段是DocumentClientException.Error.Message,并且只有在找不到数据库时才会这样。我通常会尝试避免基于人类可读消息的异常调度。

错误的数据库名称:

  • StatusCodeHttpStatusCode.NotFound
  • Error.Message{\"Errors\":[\"Owner resource does not exist\"]}...

正确的数据库名称,错误的集合名称:

  • StatusCodeHttpStatusCode.NotFound
  • Error.Message{\"Errors\":[\"Resource Not Found\"]}...

正确的数据库名称,正确的集合名称,不正确的文档ID:

  • StatusCodeHttpStatusCode.NotFound
  • Error.Message{\"Errors\":[\"Resource Not Found\"]}...

我打算使用自己提供的数据库。由于数据库中的集合有自己的报价便宜,我试图看看我是否can segregate each tenant in my multi-tenant application into its own collection。每个租户最终都有不同的索引和默认TTL策略。集合集不是固定的,并且在运行期间动态更改,因为新租户注册。我无法预测何时需要添加新的集合。没有新的租户通知:我只是通过在可能不存在的集合中创建文档来获取我需要处理的请求。有一个垃圾收集未使用的集合的过程。

我在针对SQL API Cosmos数据库实例的.NET Core 2.1应用程序中使用NuGet包Microsoft.Azure.DocumentDB.Core版本1.9.1。

azure-cosmosdb azure-cosmosdb-sqlapi
1个回答
-1
投票

如果您详细查看Message属性,您应该看到以下字符串,通知是否由于Document vs Collection而生成了404 Not Found响应。

  • ResourceType:文档
  • ResourceType:集合

这不是理想的,但您可以尝试从错误消息中重新出现此信息。

© www.soinside.com 2019 - 2024. All rights reserved.