问题
I am trying to embed schemas in other schemas that I have created, and I keep getting this error:
I am not entirely sure what is going wrong here, but what I want to do is store references to my event schema and interests schema inside the user schema. If someone could tell me what I'm doing wrong that would be great thanks!
EDIT: I am now receiving a new error:
/Users/Dynee/node_modules/mongoose/lib/schema.js:421
throw new TypeError('Invalid value for schema Array path `' + prefix + key + '`');
^
TypeError: Invalid value for schema Array path `eventsHosted`
at Schema.add (/Users/Dynee/node_modules/mongoose/lib/schema.js:421:13)
at new Schema (/Users/Dynee/node_modules/mongoose/lib/schema.js:99:10)
at Object.<anonymous> (/Users/Dynee/Documents/eventure-rest-backend/Models/User.js:5:18)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/Users/Dynee/Documents/eventure-rest-backend/Models/Event.js:2:43)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
My User Schema
var mongoose = require('mongoose');
var EventSchema = require('../Models/Event').schema;
var InterestSchema = require('../Models/Interest').schema;
var UserSchema = new mongoose.Schema({
email: String,
password: String,
eventsHosted: [EventSchema],
eventsAttended: [EventSchema],
currentlyAttending: [EventSchema],
currentlyHosting: [EventSchema],
profileImage: String,
interests: [InterestSchema],
followers: [UserSchema],
following: [UserSchema]
});
module.exports = mongoose.model('User', UserSchema);
My Event Schema
var mongoose = require('mongoose');
var UserSchema = require('../Models/User').schema;
var EventSchema = new mongoose.Schema({
title: String,
description: String,
location: String,
attendees: [UserSchema],
date: String,
});
module.exports = mongoose.model('Event', EventSchema);
My Interests Schema
var mongoose = require('mongoose');
var InterestSchema = new mongoose.Schema({
name: String
});
module.exports = mongoose.model('Interest', InterestSchema);
回答1:
It's because what you are exporting in your modules aren't Schemas
, they are Models
. When you do var EventSchema = require('../Models/Event');
you are requiring the Event Model
, not the Event Schema
. To access the underlying schemas from your models you can do:
var EventSchema = require('../Models/Event').schema;
var InterestSchema = require('../Models/Interest').schema;
var UserSchema = require('../Models/User').schema;
You also have a problem when you are referencing documents that belongs to another collection, this should work:
Event Model:
var mongoose = require('mongoose');
var UserSchema = require('./User').schema;
var EventSchema = new mongoose.Schema({
title: String,
description: String,
location: String,
attendees: [{ type: Schema.Types.ObjectId, ref: 'User' }],
date: String
});
module.exports = mongoose.model('Event', EventSchema);
Interest Model:
var mongoose = require('mongoose');
var InterestSchema = new mongoose.Schema({
name: String
});
module.exports = mongoose.model('Interest', InterestSchema);
User Model:
var mongoose = require('mongoose');
var EventSchema = require('./Event').schema;
var InterestSchema = require('./Interest').schema;
var UserSchema = new mongoose.Schema({
email: String,
password: String,
eventsHosted: [{ type: Schema.Types.ObjectId, ref: 'Event' }],
eventsAttended: [{ type: Schema.Types.ObjectId, ref: 'Event' }],
currentlyAttending: [{ type: Schema.Types.ObjectId, ref: 'Event' }],
currentlyHosting: [{ type: Schema.Types.ObjectId, ref: 'Event' }],
profileImage: String,
interests: [{ type: Schema.Types.ObjectId, ref: 'Interest' }],
followers: [{ type: Schema.Types.ObjectId, ref: 'User' }],
following: [{ type: Schema.Types.ObjectId, ref: 'User' }]
});
module.exports = mongoose.model('User', UserSchema);
How to reference another schema in my Mongoose schema? http://mongoosejs.com/docs/populate.html
来源:https://stackoverflow.com/questions/43024285/embedding-schemas-is-giving-error