I am trying to create and use an enum type in Mongoose. I checked it out, but I'm not getting the proper result. I'm using enum in my program as follows:

My schema is:

var RequirementSchema = new mongooseSchema({ status: { type: String, enum : ['NEW,'STATUS'], default: 'NEW' }, }) 

But I am little bit confused here, how can I put the value of an enum like in Java NEW("new"). How can I save an enum in to the database according to it's enumerable values. I am using it in express node.js.

1

6 Answers

The enums here are basically String objects. Change the enum line to enum: ['NEW', 'STATUS'] instead. You have a typo there with your quotation marks.

2

From the docs

Mongoose has several inbuilt validators. Strings have enum as one of the validators. So enum creates a validator and checks if the value is given in an array. E.g:

const userSchema = new mongoose.Schema({ userType: { type: String, enum : ['user','admin'], default: 'user' }, }) 
2

Let say we have a enum Role defined by

export enum Role { ADMIN = 'ADMIN', USER = 'USER' } 

We can use it as type like:

{ type: String, enum: Role, default: Role.USER, } 
2

If you would like to use TypeScript enum you can use it in interface IUserSchema but in Schema you have to use array (Object.values(userRole)).

enum userRole { admin = 'admin', user = 'user' } interface IUserSchema extends Document { userType: userRole } const UserSchema: Schema = new Schema({ userType: { type: String, enum: Object.values(userRole), default: userRole.user, required: true } }); 

Enums is String objects so for example : enum :['a','b','c'] or probably like this const listOfEn = ['a','b','c']; => enum: listOfEn

In a Schema design, you can easily add an enum value by using enum keyword like this: -

catagory: { type: String, enum: ['freeToPlay','earlyAccess','action','adventure','casual','indie','massivelyMultiplayer','racing','simulation','RPG','sports','statigy'], default: 'freeToPlay' }, 
1