mongoose默认值等于其他值

Sve*_*art 9 mongodb node.js

对于我的项目,我创建了一个简化的userSchema,如下所示:

var userSchema = new Schema({
    _id: String,
    screenname: {type: String, required: false, default: "equal _id"},
});
Run Code Online (Sandbox Code Playgroud)

用户的_id是一个字符串,也是他的用户名.到目前为止,一切都有效,直到我尝试添加额外的字段屏幕名称.我想要的是当用户创建一个帐户时,他的screenname等于_id的值.后来他可以调整它,但默认情况下它应该等于_id的值.我也尝试过:

 screenname: {type: String, required: false, default: _id},
Run Code Online (Sandbox Code Playgroud)

但是没有定义.

我该如何将默认值设置为等于另一个值?

cod*_*ode 15

使用这里pre解释的中间件

userSchema.pre('save', function (next) {
    this.screenname = this.get('_id'); // considering _id is input by client
    next();
});
Run Code Online (Sandbox Code Playgroud)


eke*_*ner 8

您可以将函数传递给默认值,以下是模式字段摘录:

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;
    }
},
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说非常有用, `@Prop({ type: String, required: false, default: function () { return this.name || this.email.split('@')[0]; }, }) name :字符串;` (2认同)