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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 04:34:56