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

MongoDB(Mongoose):如何向嵌套文档数组推送对象?

解决MongoDB数组元素追加(不存在则创建数组)的问题

你的问题出在更新操作的语法和结构错误上,原代码没有正确使用MongoDB的$push操作符,导致数组处理异常。

错误原因分析

原代码中你直接对therapy_records对象进行赋值,并且$push的用法完全错误——$push需要接收一个键值对,键是目标数组的路径,值是要追加的元素,而不是直接传数组。这种写法会覆盖原有数据,或者生成不符合预期的空对象。

正确实现方式

MongoDB的$push操作符本身就支持数组存在则追加元素,不存在则创建数组并添加的逻辑,不需要额外判断。你只需要通过点符号路径精准定位到therapy_records.daily_record数组,然后用$push追加元素即可。

正确代码示例:

const user = await User.findByIdAndUpdate(
  userId,
  {
    $push: {
      "therapy_records.daily_record": {
        therapy_day: anyNumber,
        date: anyDate,
        consumed: anyNumber,
        limit: anyNumber,
        goal: anyNumber,
        morning_timer: anyNumber
      }
    }
  },
  { new: true, upsert: true }
);

关键说明

  • 使用"therapy_records.daily_record"这种点路径,精准指向嵌套在therapy_records下的daily_record数组。
  • $push操作符会自动处理数组的存在性:如果该字段不存在,会先创建一个数组,再把元素添加进去;如果数组已存在,直接追加新元素。
  • 保留new: true确保返回更新后的用户文档,upsert: true仅在你需要当用户ID不存在时自动创建新用户的场景下使用,如果不需要创建新用户,可以去掉这个选项。

内容的提问来源于stack exchange,提问作者Carlos del Río Francés

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:10:28