Azure CosmosDB REST 创建文档时出错

标签 azure azure-cosmosdb

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

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

在各种 SDK 中,需要包含一个可选参数 disableAutomaticIdGeneration,如果将其设置为 true,则在未提供 ID 的情况下,将拒绝出现此错误的请求。我正在发出一个非常简单的 REST 请求,因此我自己不会添加此参数(而且我什至不知道我会添加什么 header (大概是一个 header ),因为 REST API 的文档未涵盖它)。

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

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

下面的请求(不是纯粹的 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 选项?

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

It is the unique ID that identifies the document, that is, no two documents should share the same id. The id must not exceed 255 characters. The ID field is automatically added when a document is created without specifying the ID value. However, you can always update the ID value by assigning a custom value to it in the request body.

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

最佳答案

当前的 SDK 会自动生成缺失的 id 作为 Guid 值。 Azure 门户使用 JS SDK,因此如果您不添加它,您会看到门户体验为您创建 id

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

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

关于Azure CosmosDB REST 创建文档时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55344254/

相关文章:

azure - 本地 Azure 部署问题

azure - 宇宙数据库 : Optimizing RUs with a time triggered FunctionApp?

java - 如何使用 java sdk 将文件从 azure adls gen 1 下载到本地?

c# - CosmosDb - 写入操作导致错误。错误=16500

azure - Cosmos Db 需要哪些权限才能访问 Azure 门户中的数据库并查看数据

Azure网站无法访问Azure DB

Azure Terraform Virtual Vetwork 对等互连错误(对两个现有 vnet 进行对等互连)

azure-cosmosdb - 插入文档之前清除 DocumentDB 集合

azure-functions - 具有事件溯源和 CQRS 的聚合

azure-cosmosdb - Azure DocumentDb 存储限制 - 它们究竟是什么意思?