如何使用 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
的字段
我在 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
的字段