Wednesday, 12 April 2017

What is the right way to abstract a nested document in a Mongoose schema?

I have read that you should always have 1 schema = 1 file, so I'm trying to abstract my embedded document to its own file and require it in the other one. This file called ShiftModel.js works:

const mongoose = require('mongoose');
const objectId = mongoose.Schema.Types.ObjectId;

const Tips = new mongoose.Schema({
  tipAmount: { type: Number, required: true },
  tipType: { type: String, required: true }
});

const Shift = new mongoose.Schema({
  date: { type: Date, required: true, index: true },
  startMileage: { type: Number },
  endMileage: { type: Number },
  tips: [Tips],
  user: { type: objectId, ref: 'User' }
});

module.exports = mongoose.model('Shift', Shift);

But what I would like to do is have this in one file called TipsModel.js:

const mongoose = require('mongoose');

const Tips = new mongoose.Schema({
  tipAmount: { type: Number, required: true }
  tipType: { type: String, required: true }
});

module.exports = mongoose.model('Tips', Tips);

And the ShiftModel.js file to look like this:

const mongoose = require('mongoose');
const objectId = mongoose.Schema.Types.ObjectId;
const Tips = require('./TipsModel');

const Shift = new mongoose.Schema({
  date: { type: Date, required: true, index: true },
  startMileage: { type: Number },
  endMileage: { type: Number },
  tips: [Tips],
  user: { type: objectId, ref: 'User' }
});

module.exports = mongoose.model('Shift', Shift);

But when I run node server/index.js I get the following error:

TypeError: Undefined type 'model' at array 'tips'

Any ideas why this doesn't work?



via smcgee31

No comments:

Post a Comment