【问题标题】:How to update nested JSON object fields in mongo Db collection using ASP.NET Core如何使用 ASP.NET Core 更新 mongo Db 集合中的嵌套 JSON 对象字段
【发布时间】:2021-11-17 19:16:39
【问题描述】:

我在这样的 mongo 集合中有一个 JSON 对象(Form

{
    "_id": "87124eb6-c9f7-49b9-8470-8c2b7fb07dc8",
    "VisitName": "demo visit",
    "Version": "string",
    "FormStatus": "string",
    "FormName": "demo form",
    "IsDeleted": false,
    "Pages": [
        {
            "PageName": "demo page",
            "PageNo": 1,
            "PageStatus": true,
            "Field": [
                {
                    "FieldName": "Gender",
                    "Value": "demo value",
                    "Comment": "demo comment",
                }
            ]
        }
    ]
}

我需要编辑 Field(这是一个对象数组)。 目前,我正在加载完整的表单并替换要更新的字段数据,然后用旧表单替换新表单。

为每个 field 更新加载整个 form 可能会在加载大型 forms 时影响性能 有没有办法用 fieldName(唯一)仅更新 field 详细信息,而不是获取整个 Form 并进行编辑?

【问题讨论】:

    标签: asp.net mongodb asp.net-core entity-framework-core nested-json


    【解决方案1】:

    更新:在回答这个问题之前,我错过了 ASP.NET 标记。我希望,这仍然可以让您找到解决方案

    您可以使用arrayFilters 进行更新。这是一个playground link 来测试它。

    db.collection.update({
      "FormName": "demo form"
    },
    {
      $set: {
        "Pages.$[pageItem].Field.$[fieldItem].Value": "new value"
      }
    },
    {
      arrayFilters: [
        {
          "pageItem.PageName": "demo page"
        },
        {
          "fieldItem.FieldName": "Gender"
        }
      ]
    })
    

    基本上,您告诉 MongoDB,更新相应数组元素中的嵌套字段,以满足 arrayFilters 指定的过滤器。因此,在这种情况下,您将路径:"Pages.$[pageItem].Field.$[fieldItem].Value" 更新为 new value,但仅在那些嵌套文档中,即:

    • 驻留在一个名为demo page的页面中
    • 并且,在该页面中,有一个文件,其名称为Gender

    【讨论】:

      猜你喜欢
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2020-11-28
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多