Mongoose如何更新文档对象数组中所有元素的status字段值为PENDING
你之前使用的$占位符仅会匹配数组中第一个满足查询条件的元素,无法实现全量更新效果。
解决方案1(推荐,MongoDB 3.6及以上版本支持)
使用全数组匹配占位符$[],可直接匹配目标数组内的所有元素,写法如下:
findOneAndUpdate( { _id: event.id }, { $set: { 'items.$[].status': "PENDING" } }, { new: true, upsert: true } )
解决方案2(兼容低版本MongoDB)
如果使用的MongoDB版本低于3.6不支持$[]语法,可以先查询文档,手动遍历更新数组后再保存:
// 查询目标文档 const targetEvent = await EventModel.findOne({ _id: event.id }); // 批量更新所有items的status字段 targetEvent.items.forEach(item => item.status = 'PENDING'); // 保存修改 const updatedEvent = await targetEvent.save();
内容的提问来源于stack exchange,提问作者Igor Zinchenko
相关产品推荐
相关产品推荐

