确定是否由于缺少集合而导致Cosmos DB未找到而​​文档

时间:2018-08-30 06:11:03

标签: azure-cosmosdb azure-cosmosdb-sqlapi

是否有一种方法可以从DocumentClientException的{​​{1}}位置确定是找不到文档,集合还是数据库?

我试图弄清楚我是否可以实现按需收集设置,并且仅在需要时调用StatusCode == HttpStatusCode.NotFound。我试图避免在发出每个请求之前调用它(大概这会为每个请求增加一次网络往返)。同样,当我知道它无济于事时,我正尝试避免在错误恢复上调用它。

从对本地仿真器的试验来看,在这三种情况下,我看到的唯一字段是DocumentClient.CreateDocumentCollectionIfNotExistsAsync,并且仅当找不到数据库时。我通常会尝试避免基于人类可读的消息进行异常调度。

错误的数据库名称:

  • DocumentClientException.Error.MessageStatusCode
  • HttpStatusCode.NotFoundError.Message

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

  • {\"Errors\":[\"Owner resource does not exist\"]}...StatusCode
  • HttpStatusCode.NotFoundError.Message

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

  • {\"Errors\":[\"Resource Not Found\"]}...StatusCode
  • HttpStatusCode.NotFoundError.Message

我打算使用具有自己报价的数据库。由于数据库中具有自己报价的集合很便宜,因此,我尝试查看是否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。

1 个答案:

答案 0 :(得分:-1)

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

  • 资源类型:文档
  • 资源类型:集合

这不是理想的选择,但是您可以尝试从错误消息中对信息进行正则表达式。