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

Mongoose如何向Signup文档的truckIds子文档数组插入数据

你遇到的问题本质是Schema定义的结构和你预期存储的结构、传参结构不匹配,分两种场景对应解决方案:

方案1:调整Schema匹配你预期的纯ID数组结构

如果你期望最终存储的truckIds是直接存Truck ID的一维数组,直接修改Schema里的truckIds定义即可:

const signupSchema = mongoose.Schema({
  userId: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: true },
  cargoId: { type: mongoose.Schema.Types.ObjectId, ref: "Cargo", required: true },
  // 去掉嵌套的truckId对象,直接定义为ObjectId数组
  truckIds: [{ type: mongoose.Schema.Types.ObjectId, ref: "Truck", required: true }],
  approved: { type: Boolean ,required: true },
  finished: { type: Boolean ,required: true },
  // 补充你代码里用到的cmrCreated字段,否则mongoose会自动忽略该字段不存储
  cmrCreated: { type: Boolean, default: false }
});

修改后只要前端传的req.body.truckIds是["id1","id2"]格式的ID数组,直接赋值就能存入你预期的结构。


方案2:不修改Schema,调整传参格式匹配现有定义

如果你要保留现有Schema的嵌套对象结构,需要把前端传的ID数组转换成符合Schema要求的格式,修改控制器代码里truckIds的赋值逻辑:

const signup = new Signup({
  userId: req.userData.userId,
  cargoId: req.body.cargoId,
  // 把纯ID数组映射为带truckId字段的对象数组,匹配Schema定义
  truckIds: req.body.truckIds.map(id => ({ truckId: id })),
  approved: req.body.approved,
  finished: req.body.finished,
  cmrCreated: false
});

这种场景下存入的truckIds结构会是[{"_id": "xxx", "truckId": "id1"}, {"_id": "xxx", "truckId": "id2"}],符合你最初的Schema定义。


额外注意:你当前代码里用到的cmrCreated字段没有在Schema中定义,默认配置下mongoose不会存储该字段,有需要记得补充到Schema里。

内容的提问来源于stack exchange,提问作者nbalog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:06:00