代码之家  ›  专栏  ›  技术社区  ›  chwarr Tamas Hegedus

确定Cosmos数据库是否由于缺少集合而未找到文档

  •  0
  • chwarr Tamas Hegedus  · 技术社区  · 6 年前

    有没有一种方法可以从 DocumentClientException StatusCode == HttpStatusCode.NotFound 是文档、集合还是数据库找不到?

    我正在尝试确定是否可以实现按需收集配置,而只调用 DocumentClient.CreateDocumentCollectionIfNotExistsAsync 当我需要的时候。我尽量避免在发出每个请求之前调用它(这可能会给每个请求增加一个额外的网络往返)。同样,我也尽量避免在错误恢复时调用它。

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

    错误的数据库名称:

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

    • 状态描述 : HttpStatusCode.NotFound
    • 错误。消息 : {\"Errors\":[\"Resource Not Found\"]}...

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

    • 状态描述 HttpStatusCode.NotFound
    • 错误。消息 : {\“错误\”:[\“找不到资源\”]}。。。

    can segregate each tenant in my multi-tenant application into its own collection . 每个租户最终都有不同的索引和默认TTL策略。集合集不是固定的,在运行时会随着新租户的注册而动态更改。我无法预测何时需要添加新的集合。这里没有新的租户通知:我只需要通过在可能不存在的集合中创建文档来处理请求。有一个对未使用的集合进行垃圾回收的过程。

    我用的是NuGet软件包Microsoft.Azure.DocumentDB.NET Core 2.1应用程序中的.Core版本1.9.1,目标是SQL API Cosmos DB实例。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Abhinav Ghai    5 年前

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

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

    推荐文章