Lance S.
Lance S.

Reputation: 3

Adding support for multiple subdocuments within a mongoose schema?

I just started using mongoose, and I declared a schema for my data. I'm wondering how I can declare more subdocuments as the same type. Say I wanted to add a second or third location subdocument, how would I do that?

var nest_schema = mongoose.Schema({
company_name: String,
website: String,
chain: Boolean,
date: {
    date_added: Date,
    date_lastupdated: { type: Date, default: Date.now},     
    },
rating: {
    yelp_rating: Number,
    yelp_reviews: Number,
    user_rating: Number,
    },
locations: {
    location_number: Number,
    location_name: String,
    address: String,
    phone: String, 
    hours: {
        Monday: String,
        Tuesday: String,
        Wednesday: String,
        Thursday: String,
        Friday: String,
        Saturday: String,
        Sunday: String,
        },
drinks: {
    drink: String,
        sizes: {
            small: Number,
            medium: Number,
            large: Number,
            }
        }
        }
});

Upvotes: 0

Views: 990

Answers (1)

srquinn
srquinn

Reputation: 10481

Define another schema and embed it in your primary schema:

var nest_schema = mongoose.Schema({
  company_name: String,
  website: String,
  chain: Boolean,
  date: {
    date_added: Date,
    date_lastupdated: { type: Date, default: Date.now},     
  },
  rating: {
    yelp_rating: Number,
    yelp_reviews: Number,
    user_rating: Number,
  },
  locations: [locationSchema],
  drinks: [drinkSchema]
});

var locationSchema = mongoose.Schema({
  number: Number,
  name: String,
  address: String,
  phone: String, 
  hours: {
    Monday: String,
    Tuesday: String,
    Wednesday: String,
    Thursday: String,
    Friday: String,
    Saturday: String,
    Sunday: String,
  }
});

You'll probably also want to make the drinks its own schema as well:

var drinksSchema = mongoose.Schema({ 
  drinks: {
    drink: String,
    sizes: {
      small: Number,
      medium: Number,
      large: Number,
    }
  }
});

Upvotes: 1

Related Questions