这里有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]
我不希望它成为一个阵列。只是一个设置实例。我看到的所有示例都使用自定义类型作为数组。
我也试过
settings : {type: Schema.Types.ObjectId, ref: 'Settings'}
但它只是在DB中创建一个带有对象ID的条目,并且不包含默认值
"settings": {
"$oid": "54ccfdcb5926074c1d53d02f"
},
最好的方法是什么?
答案 0 :(得分:1)
如果您不想设置为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且可以填充。
希望这有帮助。