如何用Mongoose添加含空对象字段coordinates的文档?
解决Mongoose中保存空对象字段的问题
问题分析
你的Mongoose Schema中coordinates字段定义为Object类型,但直接传入{}或省略该字段时,数据库中都不会创建这个字段。这是因为Mongoose默认不会将空对象类型的字段写入数据库,除非你明确配置相关规则。
解决方案
方案1:在Schema中设置默认值(推荐)
修改Schema定义,给coordinates字段添加default选项,指定默认值为空对象。这样无论创建文档时是否传入该字段,数据库都会自动生成coordinates字段并赋值为空对象:
const wlb_schema = new mongoose.Schema({ wlbId: Number, wlbName: String, color: String, coordinates: { type: Object, default: {} // 设置默认值为空对象 }, boardId: [] })
之后创建文档时,即使不传入coordinates,也会自动生成该字段:
const wlb = new WLB({ wlbId: req.body.wlbId, wlbName: req.body.wlbName, color: req.body.color, boardId: req.body.boardId }) wlb.save()
方案2:手动赋值并确保字段被保存
如果不想设置默认值,也可以在创建文档后手动给coordinates赋值为空对象,再执行保存操作:
const wlb = new WLB({ wlbId: req.body.wlbId, wlbName: req.body.wlbName, color: req.body.color, boardId: req.body.boardId }) wlb.coordinates = {}; // 手动赋值空对象 wlb.save()
方案3:禁用Mongoose的空对象过滤(不推荐)
你也可以通过修改Schema的strict选项为false来允许保存空对象,但这会关闭Mongoose的字段校验,可能带来其他问题,因此不建议使用:
const wlb_schema = new mongoose.Schema({ // ... 其他字段 coordinates: Object, }, { strict: false })
总结
最稳妥且优雅的方式是方案1,通过设置Schema字段的默认值,确保coordinates字段始终存在且默认值为空对象,无需每次创建文档时手动处理。
内容的提问来源于stack exchange,提问作者DuchSuvaa
相关产品推荐
相关产品推荐

