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

Mongoose保存自定义对象数组时数据库仅存空数组如何解决

Mongoose 存储自定义对象数组问题解答

Mongoose 完全支持存储自定义对象数组,你遇到的问题是字段名拼写不匹配导致的。

根因分析

你在 Schema 中定义的资产数组字段名为 holdings(复数形式),但创建 User 实例时传入的属性名是 holding(单数形式)。Mongoose 会自动忽略所有未在 Schema 中声明的字段,因此你传入的 holding 字段没有被识别,未赋值的 holdings 字段被 Mongoose 默认初始化为空数组,最终出现你看到的存储结果。

修正方案

只需要将实例化时的属性名改为和 Schema 定义一致的 holdings 即可,修正后代码如下:

const testuser = new UserModel({
  _id: '001',
  holdings: [{ symbol: 'itc', quantity: 100 }],
});

await testuser.save();

执行后存储的文档会正确包含你传入的 holdings 数组内容。

额外注意事项

  • 注意变量名大小写一致性:你定义模型时使用的变量名是 UserModel,示例中实例化时写的是 userModel,JavaScript 对大小写敏感,要注意变量名对应避免报错。
  • 如果没有特殊需求,数组类型字段不需要显式设置 default: undefined,Mongoose 对数组类型的默认值就是空数组;如果你希望未赋值时文档不返回 holdings 字段,当前的默认值设置是符合需求的。
  • 后续更新数组字段时,可以直接使用 $push、$addToSet 等原子操作符执行更新,或者修改数组后手动调用 markModified('holdings') 触发脏检查,避免更新不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:27:03