Azure cosmosdb 确定是否由于缺少集合和文档而找不到Cosmos DB

Azure cosmosdb 确定是否由于缺少集合和文档而找不到Cosmos DB,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure Cosmosdb,Azure Cosmosdb Sqlapi,是否有一种方法可以通过编程从DocumentClientException中确定未找到的是文档、集合还是数据库 我正在试图弄清楚是否可以实施按需收集资源调配,并且只在需要时调用DocumentClient.createDocumentCollectionIfNotexistAsync。我试图避免在发出每个请求之前调用它(这可能会为每个请求添加额外的网络往返)。同样,当我知道它不会有帮助时,我会尽量避免在错误恢复时调用它 通过对本地仿真器的实验,我看到这三种情况下唯一不同的字段是DocumentC

是否有一种方法可以通过编程从
DocumentClientException
中确定未找到的是文档、集合还是数据库

我正在试图弄清楚是否可以实施按需收集资源调配,并且只在需要时调用
DocumentClient.createDocumentCollectionIfNotexistAsync
。我试图避免在发出每个请求之前调用它(这可能会为每个请求添加额外的网络往返)。同样,当我知道它不会有帮助时,我会尽量避免在错误恢复时调用它

通过对本地仿真器的实验,我看到这三种情况下唯一不同的字段是
DocumentClientException.Error.Message
,并且仅当找不到数据库时。我通常试图避免基于人类可读消息的异常调度

错误的数据库名称:

  • StatusCode
    HttpStatusCode.NotFound
  • Error.Message
    {\“Errors\”:[\“所有者资源不存在\”]}…
正确的数据库名称,错误的集合名称:

  • StatusCode
    HttpStatusCode.NotFound
  • Error.Message
    {\“Errors\”:[\“Resource Not Found\”]}…
正确的数据库名称、正确的集合名称、错误的文档ID:

  • StatusCode
    HttpStatusCode.NotFound
  • Error.Message
    {\“Errors\”:[\“Resource Not Found\”]}…
我计划使用一个数据库,并提供自己的服务。由于数据库中有自己提供的收藏是便宜的,我想看看我是否喜欢。每个租户最终都有不同的索引和默认TTL策略。集合集不是固定的,在运行时随着新租户的注册而动态更改。我无法预测何时需要添加新集合。没有新租户通知:我只是收到一个请求,需要通过在可能不存在的集合中创建一个文档来处理。有一个对未使用的集合进行垃圾收集的过程


我正在针对SQL API Cosmos DB实例的.NET Core 2.1应用程序中使用NuGet软件包Microsoft.Azure.DocumentDB.Core Version 1.9.1。

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

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

这并不理想,但您可以尝试将此信息从错误消息中正则化。

为什么不在初始化
DocumentClient时调用
DocumentClient.CreateDocumentCollectionIfNotExistsAsync
?无论如何,它应该是一个单例。@NickChapsa:更新了问题,澄清了我为什么要探索按需收集创建。RegEx示例将是对这个答案的一个很好的补充。