嵌入模式会给出错误

时间:2017-03-26 02:25:02

标签: node.js mongodb express mongoose schema

我正在尝试在我创建的其他模式中嵌入模式,并且我不断收到此错误:

我不完全确定这里出了什么问题,但我想要做的是在我的用户架构中存储对我的事件架构和兴趣架构的引用。如果有人能告诉我我做错了什么,那将非常感谢!

编辑:我现在收到一个新错误:

   /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)

我的用户架构

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);

我的活动模式

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);

我的兴趣架构

var mongoose = require('mongoose');

var InterestSchema = new mongoose.Schema({
    name: String
});

module.exports = mongoose.model('Interest', InterestSchema);

1 个答案:

答案 0 :(得分:8)

这是因为您在模块中导出的内容不是Schemas,而是Models。执行var EventSchema = require('../Models/Event');后,您需要Event Model,而不是Event Schema。要从模型中访问底层模式,您可以执行以下操作:

var EventSchema = require('../Models/Event').schema;
var InterestSchema = require('../Models/Interest').schema;
var UserSchema = require('../Models/User').schema;

当您引用属于另一个集合的文档时,您也会遇到问题,这应该有效:

活动模型:

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);

兴趣模型:

var mongoose = require('mongoose');

var InterestSchema = new mongoose.Schema({
    name: String
});

module.exports = mongoose.model('Interest', InterestSchema);

用户模型:

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