MongoDB无法向meetings对象数组字段存储多条数据如何解决
问题根源
- 请求体格式错误:JSON对象中重复声明相同key时,后声明的值会覆盖前者,因此你提交的请求体最终只会保留最后一组
name和timer,前面的内容直接丢失。 - 控制器逻辑错误:你当前是把单个会议对象传给
meetings字段,而meetings字段定义的是数组类型,即使拿到多个会议数据,这样写也只会存一个。 - 缺失必填字段:Schema中定义了
responsible是必填项,你当前创建文档时没有传入该字段,实际运行会触发校验报错。
调整方案
第一步:修改Insomnia请求体
把多个会议数据封装到meetings数组中,同时补充必填的responsible字段:
{ "meetings": [ { "name": "Meeting Name", "timer": 100 }, { "name": "Meeting Name2", "timer": 400 } ], "responsible": "负责人姓名" }
第二步:修改控制器代码
直接接收请求体中的meetings数组传入模型即可:
const { meetings, responsible } = req.body; const response = await MeetingModel.create({ meetings: meetings, responsible: responsible }); return res.status(201).json(response);
补充:已有文档追加多条会议数据
如果你是要给已经存在的文档的meetings字段追加新数据,用$push + $each语法实现:
// docId为目标文档的_id值 await MeetingModel.findByIdAndUpdate(docId, { $push: { meetings: { $each: 新的会议数组 } } })
内容的提问来源于stack exchange,提问作者SantGT5
相关产品推荐
相关产品推荐

