对于我的项目,我创建了一个简化的userSchema,如下所示:
var userSchema = new Schema({
_id: String,
screenname: {type: String, required: false, default: "equal _id"},
});
用户的_id是一个字符串,也是他的用户名。 到目前为止,一切都有效,直到我尝试添加额外的字段屏幕名称。我想要的是当用户创建一个帐户时,他的screenname等于_id的值。后来他可以调整它,但默认情况下它应该等于_id的值。我也尝试过:
screenname: {type: String, required: false, default: _id},
但是没有定义_c的事件。
我应该如何将默认值设置为另一个值?
答案 0 :(得分:12)
使用解释here
的pre
中间件
userSchema.pre('save', function (next) {
this.screenname = this.get('_id'); // considering _id is input by client
next();
});
答案 1 :(得分:3)
您可以将函数传递给默认值,以下是模式字段摘录:
username: {
type: String,
required: true,
// fix for missing usernames causing validation fail
default: function() {
const _t = this as any; // tslint:disable-line
return _t.name || _t.subEmail;
}
},