【问题标题】:Is updating Embedded Documents in MongoDB a Manual process?更新 MongoDB 中的嵌入式文档是手动过程吗?
【发布时间】:2020-04-10 12:49:51
【问题描述】:

我对 Mongodb 还不是很熟悉,但是我有一个关于嵌入式文档的问题。

我看过一些帖子,它们向您展示了如何通过一些更新查询来更新嵌入的文档。

我的问题是:如果我有一个包含嵌入式文档的集合 - 为了性能而对其进行了非规范化;并且其中一个嵌入文档发生更改,那么我是否需要手动更新所有嵌入文档,或者是否有某种方法可以将 MongoDB 中的链接指定为自动更新?

例如: 订单记录可能类似于以下结构。请注意,其中一行中有一个产品项目。

假设 ItemName 字段在来自不同集合的产品中更改为“Product1a”,我想在每个订单中更新该产品。这是一个手动过程 - 还是有办法在 Mongodb 中设置它以自动更新嵌入式文档?

{
  "id": "ccc1beb1-e022-11e9-97f0-e7e789106ab2",
  "type": "order",
  "orderNumber": "ORD-100209857x",
  "orderDate": "2019-09-26T17:42:31.000+12:00",
  "orderItems": [
    {
      "discount": 0,
      "price": 24.4944,
      "product": {
        "id": "ccc1beb1-e022-11e9-97f0-e7e789106ab2",
        "itemNumber": "prd1",
        "itemName": "Product1"
      },
      "qty": 4,
      "rowTotal": 97.96,
      "taxAmount": 9.8
    },
    {
      "discount": 0,
      "price": 3.21,
      "itemName": "Shipping",
      "qty": 1,
      "rowTotal": 3.21,
      "taxAmount": 0      
    }
  ]
}

【问题讨论】:

  • 这是一个手动过程 - 但取决于。如果itemName发生变化,您可以选择仅更新产品集合,或仅更新产品集合+有效订单,或仅更新最近3个月的产品集合+订单等。这取决于您的数据和应用要求。跨度>

标签: mongodb


【解决方案1】:

不确定手动过程是什么意思,但这里有一些示例代码来更新所有文档

db.collection.updateMany({}, {$set:{"orderItems.product.itemName": "updatedProductName"}})

如果这不是您要找的,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    相关资源
    最近更新 更多