Next.js 13中Mongoose模型新增属性未同步至MongoDB的问题
你遇到的doneSessions字段没出现在数据库文档里,主要是以下几个原因,对应解决办法如下:
Mongoose模型缓存未更新
Next.js的无服务器/SSR架构下,Mongoose会缓存已创建的模型。你修改Schema新增字段后,旧的模型缓存还在运行,不会自动加载新Schema。解决办法很简单:重启你的Next.js开发服务器,让Mongoose重新读取更新后的Schema创建模型。已有MongoDB文档不会自动补全新字段
Schema更新后,只有新创建的用户文档会自动带上doneSessions的默认值0。之前已经存在的旧文档不会自动添加这个字段,需要手动批量更新:
执行以下Mongoose命令(可以在API路由或脚本里运行):await User.updateMany({}, { $set: { "membership.doneSessions": 0 } });这条命令会给所有用户的
membership对象补上doneSessions字段,值设为默认的0。检查嵌套字段的更新逻辑
因为doneSessions是嵌套在membership子Schema里的字段,如果你在更新用户时没有操作membership对象,旧文档的membership不会自动新增该字段。确保在更新用户时,要么显式设置membership.doneSessions,要么通过上述批量更新命令一次性补全。确认strict模式无影响
Mongoose默认开启strict模式,会过滤Schema未定义的字段,但你已经在Schema里明确添加了doneSessions,所以这个模式不会阻止字段写入。如果之前手动设置过strict: false也不用担心,不影响新增字段的生效。
内容的提问来源于stack exchange,提问作者AlexandruIoan20

