能否在Mongoose Schema中使用JavaScript变量设置默认值?
问题解答
可以用变量设置Mongoose Schema字段的默认值,但你当前的写法存在关键问题——直接赋值变量的话,默认值会固定为Schema定义时CurrentUser的静态值,如果后续CurrentUser发生变化,新创建的文档依然会使用最初的那个值,这通常不符合动态获取当前用户的需求。
正确的做法是给default传入一个函数,Mongoose会在创建文档时调用这个函数,返回当前最新的CurrentUser值:
const momentschema = new mongoose.Schema({ username:{ type:String, default: () => CurrentUser // 通过函数返回动态值 }, date : String , time : String, place:String, color:String, saw:String, response:String, },{ timestamps: true })
这样每次创建新文档时,都会获取当前最新的CurrentUser值作为username的默认值。
需要注意的细节:
- 要确保CurrentUser在函数执行时已定义且有有效值,避免出现
undefined的情况 - 如果CurrentUser是异步获取的(比如从请求上下文、数据库查询),不能直接用这种同步函数,需要在创建文档时手动指定username,或者使用Mongoose的预保存中间件(pre-save hook)来处理异步逻辑
内容的提问来源于stack exchange,提问作者Hariii Krishnan
相关产品推荐
相关产品推荐

