Как обновить поля вложенных объектов JSON в коллекции mongo Db с помощью ASP.NET Core

У меня есть объект JSON ( форма ) в коллекции mongo, подобный этому

      {
    "_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",
                }
            ]
        }
    ]
}

Мне нужно отредактировать поле (которое представляет собой массив объектов). В настоящее время я загружаю полную форму и заменяю данные поля, которые нужно обновить, а затем заменяю новую форму старой.

загрузка всей формы для каждого обновления поля может повлиять на производительность при загрузке больших форм. Есть ли способ обновить только детали поля с помощью fieldName (Unique) вместо выборки всей формы и редактирования?

1 ответ

Обновление: я пропустил тег ASP.NET, прежде чем ответить на это. Надеюсь, это все еще поможет вам найти решение.

Вы можете использовать обновление с помощью arrayFilters. Вот на ссылкаигровую площадку, чтобы проверить это.

      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
Другие вопросы по тегам