如何向MongoDB Schema定义的用户文档answers数组字段添加值?
问题原因
findByIdAndUpdate第一个参数直接接收ID值,不需要传入{_id: req.params.id}格式的查询对象,该写法适用于findOneAndUpdate。$set操作符会直接覆盖整个answers数组,不能实现追加元素的效果,追加数组元素需要使用$push操作符。
正确实现
1. 追加单个answer元素
先构造符合answerSchema结构的对象,再执行更新:
// 构造待添加的answer数据,替换为实际业务值 const newAnswer = { position: 2, slider: 60, scale: 4 } const updated = await User.findByIdAndUpdate( req.params.id, // 直接传入用户ID { $push: { answers: newAnswer } }, // 往answers数组追加新元素 { new: true, runValidators: true } // new: true 返回更新后的文档,runValidators: true 开启Schema校验避免存入非法数据 )
2. 批量追加多个answer元素
如果需要一次性添加多个元素,搭配$each操作符使用:
// 构造待添加的answer数组,替换为实际业务值 const answerList = [ { position: 1, slider: 30, scale: 2 }, { position: 3, slider: 90, scale: 5 } ] const updated = await User.findByIdAndUpdate( req.params.id, { $push: { answers: { $each: answerList } } }, { new: true, runValidators: true } )
注意事项
如果更新后没有返回预期结果,可排查以下两点:
- 确认
req.params.id对应的用户文档真实存在 - 确认待插入的
answer字段类型和answerSchema定义一致,无缺失必填字段
内容的提问来源于stack exchange,提问作者mortsahl
相关产品推荐
相关产品推荐

