ASP.NET Core下如何更新MongoDB集合中嵌套JSON对象的Field字段
完全可以实现,你可以使用MongoDB 3.6及以上版本支持的带过滤条件的位置运算符直接在服务端完成原子更新,无需拉取完整的Form文档。
具体实现示例
以下示例为更新_id为87124eb6-c9f7-49b9-8470-8c2b7fb07dc8的Form中,FieldName为Gender的字段值和备注:
db.Form.updateOne( // 定位目标Form主文档 { "_id": "87124eb6-c9f7-49b9-8470-8c2b7fb07dc8" }, // 定义要更新的嵌套字段内容 { $set: { "Pages.$[page].Field.$[targetField].Value": "male", "Pages.$[page].Field.$[targetField].Comment": "已更新" } }, // 配置数组过滤规则,精准匹配目标Field { arrayFilters: [ // 无Page限制时留空即可,若要限定特定Page可添加条件,比如{"page.PageNo":1} { "page": {} }, // 匹配FieldName为目标值的Field对象 { "targetField.FieldName": "Gender" } ] } )
方案优势
- 全程在数据库服务端执行,不需要把大体积的Form文档传输到客户端,网络开销极低,性能远优于全量拉取再覆盖的方案
- 原子更新完全规避了并发更新的覆盖问题:全量覆盖方案下如果多个请求同时更新同一个Form的不同Field,很容易出现后提交的请求覆盖先提交的修改,原子更新不存在该问题
- 灵活性高,仅需修改过滤条件即可适配限定Page、限定Form状态等各类更新场景
内容的提问来源于stack exchange,提问作者Aravind Shajan
相关产品推荐
相关产品推荐

