You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向MongoDB Schema定义的用户文档answers数组字段添加值?

问题原因

  1. findByIdAndUpdate 第一个参数直接接收ID值,不需要传入{_id: req.params.id}格式的查询对象,该写法适用于findOneAndUpdate。
  2. $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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:24:03