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

时间:2015-01-31 05:47:55

标签: javascript node.js mongodb mongoose

这里有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"
},

最好的方法是什么?

1 个答案:

答案 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且可以填充。

希望这有帮助。