如何在MongoDB中插入对象数组?Mongoose写入数组内对象无法显示问题
问题原因
你遇到的问题是字段名不匹配导致的:
Mongoose Schema中定义的成就数组字段名为achievement(单数形式),但你插入文档时使用的字段名为achievements(复数形式,多了后缀s)。Mongoose默认开启严格模式,会自动过滤掉Schema中未声明的字段,因此你传入的成就数组内容并没有被写入数据库,数据库中仅保留了Schema定义对应的空achievement数组,所以在MongoDB Atlas中只能看到空数组结构,看不到具体的对象内容。
解决方法
两种方案二选一即可,保证Schema定义和插入时的字段名一致:
- 方案1:修改Schema的字段名,和插入代码的字段名匹配
const playerSchema = new mongoose.Schema({ name: String, stats :{ wins:Number, losses:Number, xp:Number }, // 字段名改为复数,和插入时的字段名保持一致 achievements:[ { name:String, date: String } ] });
- 方案2:修改插入文档的字段名,和Schema的定义匹配
const fluffy = new playerModel({ "name":"nic raboy", "stats":{ "wins":5, "losses":10, "xp":300 }, // 字段名改为单数,和Schema定义保持一致 "achievement":[ {"name":"Massive XP","date" :"25-08-21"}, {"name":"instant loss","date":"24-08-21"} ] });
额外提示:如果想要避免后续再出现这类字段名拼写错误未被发现的问题,可以在Schema配置中添加strict: 'throw'参数,当传入未定义字段时Mongoose会直接抛出错误,提前暴露问题。
内容的提问来源于stack exchange,提问作者Debaditya Sinha
相关产品推荐
相关产品推荐

