【问题标题】:RavenDB Update a nested document?RavenDB 更新嵌套文档?
【发布时间】:2019-05-11 09:40:45
【问题描述】:

以下是存储在 RavenDB 中的示例“订单”文档。 如果我只想更新一个嵌套文档 例如。 "Product": "products/2-A" 我想单独更新这个嵌套元素,如何使用 Raven C# 客户端来实现?

示例 JSON 文档:

{
    "Company": "companies/65-A",
    "Employee": "employees/1-A",
    "Freight": 8.53,
    "Lines": [
        {
            "Discount": 0.2,
            "PricePerUnit": 19,
            "Product": "products/2-A",
            "ProductName": "Chang",
            "Quantity": 24
        },
        {
            "Discount": 0,
            "PricePerUnit": 10,
            "Product": "products/3-A",
            "ProductName": "Aniseed Syrup",
            "Quantity": 4
        },
        {
            "Discount": 0,
            "PricePerUnit": 22,
            "Product": "products/4-A",
            "ProductName": "Chef Anton's Cajun Seasoning",
            "Quantity": 1
        }        
    ],
    "OrderedAt": "1998-05-06T00:00:00.0000000",
    "RequireAt": "1998-06-03T00:00:00.0000000",
    "ShipTo": {
        "City": "Albuquerque",
        "Country": "USA",
        "Line1": "2817 Milton Dr.",
        "Line2": null,
        "Location": {
            "Latitude": 35.1154322,
            "Longitude": -106.6710792
        },
        "PostalCode": "87110",
        "Region": "NM"
    },
    "ShipVia": "shippers/2-A",
    "ShippedAt": null,
    "@metadata": {
        "@collection": "Orders",
        "@flags": "HasRevisions"
    }
}

请提供您的建议。 谢谢

【问题讨论】:

    标签: ravendb ravendb4


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      如果您要更新相关文档“products/2-A”它不是“Lines”数组中的元素,唯一要做的就是加载产品,编辑和保存更改。

      如果您要更新“Lines”中的元素,我建议您了解 RavenDB 的工作原理(或者更笼统地说,面向文档的数据库的工作原理)。实体作为文档完全持久化。然后你只需要加载和编辑列表中的元素,并使用 session.SaveChanges() 持久化“Order”。

      【讨论】:

      • 我明白,但在某些情况下,如果我想这样做,这样做的正确选择是什么?如果在这种情况下我在父文档中有 100 个嵌套文档,那么说同样的话,正确的方法是什么?如果我仍然想加载完整的文档并编辑一个嵌套文档的一部分,我觉得这将是一种复杂的方法。
      • 如果你想更新“products/2-A”文档和订单里面的非规范化数据你只需要加载和更新这两个文档,你在文档中做什么无所谓它完全每次编辑实体时都会保留。更一般地说,如果您需要更新多个文档(例如数千个订单),您可以考虑使用补丁,但我认为不是这种情况。
      • 那么你推荐哪一个?补丁更新或创建独立文档并编辑?
      • 如果没有您的上下文知识,这很困难,不清楚您是如何构建数据库的以及为什么。就个人而言,在我遇到性能问题之前,我会避免使用补丁
      • 如果您发现自己经常在另一个对象中修改一个对象,并且独立于父对象,这是嵌入对象应该是一个独立文档的标志之一。
      猜你喜欢
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多