【问题标题】:Azure CosmosDB REST error creating documentAzure CosmosDB REST 创建文档时出错
【发布时间】:2019-03-25 18:21:41
【问题描述】:

尝试使用 REST API 创建文档时出现以下错误:

The input content is invalid because the required properties - 'id; ' - are missing

在各种 SDK 中,有一个可选参数 disableAutomaticIdGeneration,如果设置为 true,如果未提供 ID,则会拒绝请求并出现此错误。我正在发出一个非常简单的 REST 请求,所以我自己没有添加这个参数(而且我什至不知道什么标头——大概是一个标头——我会添加,因为 REST API 的文档没有涵盖它)。

唯一需要注意的是集合有一个定义的分区键。我找不到任何说明如果定义了分区键需要 ID 的文档,但似乎确实如此。

除非有人可以回答为什么会/可能会发生这种情况,否则我会考虑我的“it-must-be-defined-if-partition-key-is-defined”答案 em> 最终回答。

下面的请求(不是单纯的 HTTP,而是内容):

{
    "headers": {
        "content-type": "application/json",
        "x-ms-version": "2017-02-22",
        "x-ms-date": "Mon, 25 Mar 2019 17:57:03 GMT"
    },
    "body": {
        "data": "myData",
        // "id": "some_id" //I don't want to do this because I want Cosmos to auto-generate this like when I create a document in the Portal!
    },
    "method": "post",
    "url": "https://my-database-server.documents.azure.com/dbs/MyDatabase/colls/MyCollection/docs"
}

还有几个问题要解开...

Create a Document 文档指出id必需的,所以也许门户实际上是在浏览器端创建它,然后将它包含在引擎盖下的请求中,但如果这是为什么 SDK 中存在 disableAutomaticIdGeneration 选项?

此外,相同的文档状态(突出显示是我的):

它是标识文档的唯一ID,即没有两个文档应该共享相同的ID。 ID 不得超过 255 个字符。 在创建文档时自动添加 ID 字段而不指定 ID 值。但是,您始终可以通过在请求正文中为其分配自定义值来更新 ID 值。

通过粗体部分,似乎 key id 是必需的,但也许我可以传递 null 或空字符串?但是,我尝试了这两种方法,两次都出错(一个说null是不允许的,另一个是字符串不能为空)。

【问题讨论】:

    标签: azure azure-cosmosdb


    【解决方案1】:

    当前的 SDK 会自动将缺失的 ids 生成为 Guid 值。 Azure 门户使用 JS SDK,这就是为什么您会看到门户体验为您创建id,如果您不添加它。

    REST API 的文档似乎具有误导性,需要根据您共享的内容进行调整,因为 REST API 不会自动生成 id,但它会验证它是否在有效负载中。

    总之,如果您要实现自己的 REST 客户端,则可以添加自己的自动生成逻辑客户端(就像 SDK 一样),REST API 的必要条件是它包含在有效负载中。

    【讨论】:

    • 感谢马蒂亚斯的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 2021-12-28
    相关资源
    最近更新 更多