如何使用 ASP.NET 核心更新 mongo 数据库集合中的嵌套 JSON 对象字段

How to update nested JSON object fields in mongo Db collection using ASP.NET Core

我在 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(这是一个对象数组)。 目前,我正在加载完整的 form 并替换要更新的 field 数据,然后将新表格替换为旧表格。

为每个 field 更新加载整个 form 可能会影响性能,当加载大型 forms 有什么方法可以只更新 field 详细信息 fieldName(Unique) 而不是获取整个 Form 和编辑?

Update: I missed the ASP.NET tag before answering this. I hope, this still gets you to the solution

您可以使用 arrayFilters. Here's a 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
  • 的字段