Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js应用程序中引用自定义架构时出错_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

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

Javascript 在node.js应用程序中引用自定义架构时出错,javascript,node.js,mongodb,mongoose,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,

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

我遇到了这个错误

throw new TypeError('Invalid value for schema path `'+ prefix + i +'`');
但是如果我把它做成一个数组,它就会工作

settings  : [SettingsSchema]
我不希望它是一个数组。只有一个设置实例。我看到的所有示例都将其自定义类型用作数组

我也试过了

settings  : {type: Schema.Types.ObjectId, ref: 'Settings'}
但它只是在DB中创建一个具有对象id的条目,不包括默认值

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

执行此操作的最佳方法是什么?

如果不希望设置为
数组
,可以将设置保留为对象,并将其引用到设置模型。提取时,您可以填充设置

更改

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

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


希望这有帮助。

您是否导出了settingsSchema模块。导出=settingsSchema;是的。我已经编辑了我的问题,以显示我之前尝试过的完整文件。它在数据库中创建了一个条目,但没有用默认值填充它。“设置”:{“$oid”:“54ccfdcb5926074c1d53d02f”},它不会填充它的ELT。您必须在查找时填充它。感谢您的回复。但是,当我创建一个新的设置实例时,它是否会自动填充默认值?当它被设置为一个数组,并且我在我的一条路由中创建了一个新实例(new Settings())时,它被默认值填充,但这种方式不会获取默认值。我遗漏了什么吗?当您将其设置为数组时,它不会填充,但会将设置保留为架构的一部分。
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);