Sven van den Boogaart
Sven van den Boogaart

Reputation: 12323

mongoose default value equal to other value

For my project i've created an userSchema which simplified looks like the following:

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

The user has an _id that is a string which also is his username. Everything works so far until i tried to add an extra field screenname. What i want is when the user creates an account, his screenname equals the value of _id. Later he can adjust it but by default it should equal the value of _id. i've also tried :

 screenname: {type: String, required: false, default: _id},

But than ofcourse _id is not defined.

How should i set the default value to equal another value ?

Upvotes: 23

Views: 11882

Answers (2)

ekerner
ekerner

Reputation: 5840

You can pass a function to default, following is a schema field excerpt:

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;
    }
},

Upvotes: 16

codeofnode
codeofnode

Reputation: 18609

use the pre middleware explained here

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

Upvotes: 32

Related Questions