【问题标题】:Why does my Azure Cosmos DB SQL API Container Refuse Multiple Items With Same Partition Key Value?为什么我的 Azure Cosmos DB SQL API 容器拒绝具有相同分区键值的多个项目?
【发布时间】:2020-10-24 17:10:06
【问题描述】:

在 Azure Cosmos DB (SQL API) 中,我创建了一个容器,其“分区键”设置为 /part_key,我现在正尝试在数据资源管理器中创建和编辑数据。

我创建了一个如下所示的项目:

{
    "id": "test_id",
    "value": "val000",
    "magicNumber": 32,
    "part_key": "asdf"
}

我现在正在尝试创建一个如下所示的项目:

{
    "id": "frank",
    "value": "val001",
    "magicNumber": 33,
    "part_key": "asdf"
}

根据文档,我认为分区键中的每个项目都需要一个不同的id,这对我来说意味着多个项目实际上可以共享一个分区键,这很有意义。

但是,当我尝试保存第二项时出现错误:

{"code":409,"body":{"code":"Conflict","message":"Entity with the specified id already exists in the system...

我发现如果我将part_key 的值更改为其他值(比如asdf2),那么我可以保存这个新项目。

要么我对这个功能的期望是错误的,要么我做错了。这里有什么问题?

【问题讨论】:

    标签: azure azure-cosmosdb azure-cosmosdb-sqlapi


    【解决方案1】:

    您的理解是正确的,如果您尝试替换一个 id 等于现有文档 id 的新文档,则可能会发生这种情况。这是不允许的,所以操作失败。

    在插入修改后的副本之前,您需要为其分配一个新的 id。我测试了这个场景,它看起来很好。可能会尝试创建一个新文档并检查

    【讨论】:

    • 谢谢。我最终删除了容器并创建了一个新容器,现在它可以工作了……我把它归结为一个完全的新手:S
    • 很高兴它有帮助,但我怀疑你必须再次创建容器,这是不必要的。标记是否有帮助
    • @Sajeetharan - 真的没有什么可“标记”的 - 问题是暂时的(可能基于之前插入的数据?谁知道 - 我们没有看到现有数据和确切的操作顺序) .您提供了一般性评论,而不是明确的答案。很高兴 OP 解决了他们的问题,但是......这里真的没有什么值得赞成或接受的。
    • 我已经考虑过了,实际的问题是“这里出了什么问题”,这个答案基本上回答了“什么都没有”并证实了我的想法,这确实促使我放弃我所拥有的并尝试再次,也使它有帮助。因此,我相信这确实值得作为一个公认的低质量问题的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    相关资源
    最近更新 更多