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
相关产品推荐
相关产品推荐

