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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:57:02