Как обновить поля вложенных объектов 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