让 CosmosDB 选择插入项目的 ID

Have CosmosDB choose the ID of the inserted item

在 CosmosDB SQL API 实例中,我想在我的容器中插入一个简单的 JSON object,比方说

{
    "first_name":"John",
    "last_name":"Doe"
}

使用 azure 上提供的示例应用程序,我在 Python 中执行以下操作:

container.create_item(body=snapshot)

我遇到了这个错误,这似乎很正常:

run_sample has caught an error. (BadRequest) Message: {"Errors":["The input content is invalid because the required properties - 'id; ' - are missing. Learn more: https:\/\/aka.ms\/CosmosDB\/sql\/errors\/missing-id"]}

我不想提供 ID,而是让 CosmosDB 实例选择它,就像许多其他系统可以做的那样(postgres,mongo...)。

虽然我可以在 CosmosDB MongoDB API 实例中执行此操作,但我无法使用 SQL API 实例执行此操作。这能实现吗?

我对此 collection 进行了以下设置:

{
    "indexingMode": "consistent",
    "automatic": true,
    "includedPaths": [
        {
            "path": "/*"
        }
    ],
    "excludedPaths": [
        {
            "path": "/\"_etag\"/?"
        }
    ]
}

Cosmos SQL API 没有任何自动 ID 生成。这在您分享的错误中的 aka.ms link 中被引用:https://aka.ms/CosmosDB/sql/errors/missing-id

没有可以打开的设置或配置来实现此目的。 id 字段需要在您的应用程序代码中生成并填充。

一些较旧的 SDK 通过将 Guid 分配给 id 来进行本地自动生成,但这在您的应用程序代码中很容易实现。

在 NodeJS(您似乎正在使用的语言)中,您可以利用 NodeJS crypto.randomUUID 方法 (https://nodejs.org/docs/latest-v14.x/api/crypto.html#crypto_crypto_randomuuid_options) 生成随机 Guid 并将其分配给 id 属性 或使用您自己的自定义业务逻辑。