在node.js应用程序中引用自定义模式时出错

Node.js新手在这里…我有两个模式,我引用另一个。

var mongoose = require('mongoose'); var Schema = mongoose.Schema; /*Model for user settings */ var SettingsSchema = new Schema({ shoppingDay: {type: String, default : "Friday"}, shoppingFrequency : {type: String, default : "weekly"}, reminderEmails : {type: Boolean, default : true} }); module.exports = mongoose.model('Settings', SettingsSchema); 

 var mongoose = require('mongoose'); var Schema = mongoose.Schema; var Settings = require('./Settings.js'); var SettingsSchema = Settings.Schema; /*Model for user settings */ var UserTrendSchema = new Schema({ email : String, settings : SettingsSchema }, {collection : 'UserTrends'}); module.exports = mongoose.model('UserTrend', UserTrendSchema); 

我遇到这个错误

 throw new TypeError('Invalid value for schema path `'+ prefix + i +'`'); 

但如果我把它作为一个数组,它的工作原理。

 settings : [SettingsSchema] 

我不希望它是一个数组。 只是一个设置的实例。 我看到的所有示例都使用它们的自定义types作为数组。

我也试过了

 settings : {type: Schema.Types.ObjectId, ref: 'Settings'} 

但它只是在对象ID中创build一个DB的条目,并不包含默认值

  "settings": { "$oid": "54ccfdcb5926074c1d53d02f" }, 

什么是最好的方法来做到这一点?

如果你不想设置成一个Array你可以保持设置为对象,并将其引用到设置模型。 同时提取您可以填充设置。

变化

 var mongoose = require('mongoose'); var Schema = mongoose.Schema; /*Model for user settings */ var SettingsSchema = new Schema({ shoppingDay: {type: String, default : "Friday"}, shoppingFrequency : {type: String, default : "weekly"}, reminderEmails : {type: Boolean, default : true} }); module.exports = mongoose.model('Settings', SettingsSchema); 

 var mongoose = require('mongoose'); var Schema = mongoose.Schema; /*Model for user settings */ var UserTrendSchema = new Schema({ email : String, settings : {type: Schema.Types.ObjectId, ref: 'Settings'} // refers to Settings Model. }, {collection : 'UserTrends'}); module.exports = mongoose.model('UserTrend', UserTrendSchema); 

其中设置将是objectId,可以填充。

希望这可以帮助。