【问题标题】:Update document in a collection with different document types, but same partition key使用不同的文档类型更新集合中的文档,但分区键相同
【发布时间】:2020-10-02 15:12:09
【问题描述】:

我有一个 cosmos db 文档集合,其中包含不同类型的文档,但共享相同的分区键。有没有办法通过 C# 更新具有相同分区键但不同文档类型的文档?在我看到的所有示例中,删除/更新文档需要唯一的分区键/文档 uri。但是,就我而言,有 3 个文档具有相同的分区键。

下面是一个集合(借用自https://docs.microsoft.com/en-us/azure/cosmos-db/modeling-data),其中包含由“bookId”划分的两种类型的文档。

我想知道是否可以使用分区键和类型/其他条件来更新/删除文档。

示例 1:使用 bookId:“b1”,类型:“review”和 id:“r1”更新文档

示例 2:删除所有 bookId 为“b1”的文档

Book documents:
{
    "id": "b1",
    "name": "Azure Cosmos DB 101",
    "bookId": "b1",
    "type": "book"
}

Review documents:
{
    "id": "r1",
    "content": "This book is awesome",
    "bookId": "b1",
    "type": "review"
},
{
    "id": "r2",
    "content": "Best book ever!",
    "bookId": "b1",
    "type": "review"
}

【问题讨论】:

    标签: azure-cosmosdb azure-cosmosdb-sqlapi


    【解决方案1】:

    Cosmos 不支持基于集合的插入/更新/删除操作。您必须从您的客户端单独调用这些操作,或者您可以编写一个存储过程并传递查找相关数据所需的任何内容,但您仍然要单独调用这些操作,只是服务器端。

    例子:

    Replace an item

    Delete an item

    Write stored procedures

    希望这有帮助。

    【讨论】:

    • 感谢您的回复!在 C# 中一次调用中读取多种类型的文档是否有最佳实践?假设我想获取书籍详细信息(包括名称)以及 bookId:1 的所有评论。用 bookId:1 查询所有文档然后在 C# 中根据类型进行某种类型转换会更好吗?还是有 2 个单独的读取?
    • 是的,这正是你要做的。在一个操作中发送查询以获取所有数据,然后遍历结果集,检查类型属性并使用开关或某些条件来水合表示数据分层形状的 POCO,然后返回给用户,网页等
    猜你喜欢
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2022-07-26
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多