如何在MongoDB中通过单条查询批量更新数组内所有对象的属性——设置notifications数组seen为true
解决方案:单条MongoDB查询批量更新数组内所有元素的属性
没问题,你要的单条查询更新数组中所有对象seen属性的需求,MongoDB的**全部位置操作符($[])**刚好能搞定,一步到位!
核心思路
使用$set更新操作符结合$[],这个特殊的位置符会匹配目标数组里的每一个元素,然后统一修改指定字段的值。
具体查询代码
假设你的集合名为user_notifications,执行以下命令即可:
db.user_notifications.updateOne( // 匹配目标文档的条件,这里可以用_id或者user_id { _id: 'fjkldjasfljsdklfj' }, // 批量更新notifications数组中所有元素的seen属性为true { $set: { 'notifications.$[].seen': true } } )
如果需要匹配user_id而不是_id,只需要把查询条件换成:
{ user_id: 'fjdskjafkldsjadf' }
效果说明
执行这条命令后,你的目标文档里notifications数组的所有对象,不管原来seen是true还是false,都会被统一设置为true,完全符合你的需求。
注意:这个语法要求MongoDB版本在3.2及以上,目前绝大多数生产环境都满足这个版本要求。
内容的提问来源于stack exchange,提问作者willmahon
相关产品推荐
相关产品推荐

