在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,可以填充。
希望这可以帮助。