Mongoose调用insertMany插入文档时schema默认值字段未保存的原因是什么
问题原因
- 调用
insertMany时未开启默认值插入配置:Mongoose部分旧版本在批量插入场景下,默认不会主动为缺失的字段填充Schema定义的默认值,需要手动指定配置参数触发默认值逻辑。 - 传入的待插入文档中显式包含值为
undefined的status字段:Mongoose会判定你主动要忽略该字段,不会触发默认值填充,最终MongoDB不会存储该字段。 - Schema的
strict配置异常:如果strict被设置为false或throw且没有额外适配,也可能导致默认值填充失效,该场景出现概率较低。
解决方案
- 调用
insertMany时传入第二个参数,开启默认值插入配置:
await PaymentDB.insertMany(req.body.payments, { setDefaultsOnInsert: true });
- 批量插入前预处理待插入数据,过滤掉显式为
undefined的status字段,或提前为缺失status属性的文档赋值默认值false。 - 如果你使用的是Mongoose 4.x及更旧版本,建议升级到5.x/6.x/7.x稳定版本,旧版本对批量插入的默认值支持存在较多已知缺陷。
内容的提问来源于stack exchange,提问作者Guy Indepurker
相关产品推荐
相关产品推荐

