Skip to content

Instantly share code, notes, and snippets.

@bnoguchi
Created May 3, 2011 09:19
Show Gist options
  • Select an option

  • Save bnoguchi/953059 to your computer and use it in GitHub Desktop.

Select an option

Save bnoguchi/953059 to your computer and use it in GitHub Desktop.
How to access enumValues in mongoose from a Model or Document
var mongoose = require('./index')
, TempSchema = new mongoose.Schema({
salutation: {type: String, enum: ['Mr.', 'Mrs.', 'Ms.']}
});
var Temp = mongoose.model('Temp', TempSchema);
console.log(Temp.schema.path('salutation').enumValues);
var temp = new Temp();
console.log(temp.schema.path('salutation').enumValues);
@wavded

wavded commented May 3, 2011

Copy link
Copy Markdown

thanks!

@renatoargh

Copy link
Copy Markdown

thanks!!! :)

@kirrg001

Copy link
Copy Markdown

great!

@atishn

atishn commented Jul 24, 2013

Copy link
Copy Markdown

Thanks

@chichilatte

Copy link
Copy Markdown

So neat, but doesn't work for me (mongoose 3.6.20): for the path() function, my enum fields must be prefixed with ".enum", and there is no "enumValues" property on the returned object. This works for me... console.log(Temp.schema.path('salutation.enum').options.type) // We get ['Mr.', 'Mrs.', 'Ms.']

Update: bnoguchi's neater version works if you do Temp.path("salutation").enum('Mr.', 'Mrs.', 'Ms.'); after you've defined the schema (i was using salutation: {enum: ['Mr.', 'Mrs.', 'Ms.']} in the Schema constructor parameter, which doesn't seem to work as well).

@zubairalam

Copy link
Copy Markdown

I've salutation sub-document inside profile document, so Temp.schema.path('profile.salutation').enumValues works in my case.

@m4grio

m4grio commented Jan 6, 2015

Copy link
Copy Markdown

Thanks!

@aboutvale

Copy link
Copy Markdown

Great!!

@michaelezehi

Copy link
Copy Markdown

This was very helpful. Thanks

@renanborgez

Copy link
Copy Markdown

Thanks a lot, helpful!!

@adityaladwa

Copy link
Copy Markdown

Thank you

@manouman

Copy link
Copy Markdown

If you want to know all the enum values inside in array type, you need something like this:

temp.path('salutation.0.type').enumValues

@zamrokk

zamrokk commented Sep 7, 2016

Copy link
Copy Markdown

👍 This kind of thing is possible too :

collaboration.schema.path('typeRef').enumValues[0]

@chipro

chipro commented Jan 15, 2017

Copy link
Copy Markdown

Wow, I was just wondering how to do this as I need the enum data to implement a droplist. Very helpful, thanks!

@hasansa

hasansa commented Mar 29, 2017

Copy link
Copy Markdown

Thanks

@LukeXF

LukeXF commented Nov 5, 2017

Copy link
Copy Markdown

Perfect, thank you!

@jeffwesson

Copy link
Copy Markdown

Thank you!

@imromec

imromec commented Apr 2, 2018

Copy link
Copy Markdown

How to access the enum from a non-model schema? Like if I am using a discriminator schema and in that schema, there is enum field, how can I can access that?

ghost commented Dec 3, 2018

Copy link
Copy Markdown

nice!

@AlfredBryan

Copy link
Copy Markdown

nice

@DennyTim

Copy link
Copy Markdown

thanks.

@iamromec

Copy link
Copy Markdown

To find enums of all enum properties:

const schema = Temp.schema;
const enums = Object.keys(schema.obj)
        .filter(k => schema.obj[k].hasOwnProperty('enum'))
        .map(k => {
          let o = {};
          o[k] = schema.obj[k].enum;
          return o;
        })
        .reduce((r, v) => Object.assign(r, v), {});

@utsukushiihime

Copy link
Copy Markdown

Just what I needed. Thank you!

@FrankDev-327

FrankDev-327 commented May 25, 2021

Copy link
Copy Markdown

for me it worked like this:

//model typeContacts.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const arrayTypeContacts = [
{ type: 'phone', name: 'principal', icon: 'phone' },
{ type: 'email', name: 'principal', icon: 'envelope' },
{ type: 'whatsapp', name: 'principal', icon: 'whatsapp' },
];
const TypeConctactSchema = Schema({
contactType: {
type: String,
enum: arrayTypeContacts,
default: arrayTypeContacts
}
});

const TypeContacts = mongoose.model('typecontacts', TypeConctactSchema);
module.exports = TypeContacts;

//controller
const data = await TypeContactModel.schema.path('contactType').options.enum;

@toryrory

Copy link
Copy Markdown

thank you a lot!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment