在Mongoose中保存嵌套模式

时间:2015-11-12 00:46:06

标签: node.js mongodb mongoose jsonschema

我正在尝试使用Mongoose JS为我的数据库设计一个具有以下结构的设计。每个用户都将拥有一系列锦标赛。我的问题是数据库将保存除了TournamentSchemas数组之外的所有内容。它只是一个空数组。我不确定我在这里做错了什么,而且我已经在这个网站的其他地方看过了。

以下是我尝试使我的数据库看起来像:

User {
    name : String
    email : String
    password : String

    tournaments : [
        {
            name : String
            location : String
            date : ISO_DATE
            numTeams : NumberInt 

这是' user.js:

 var mongoose = require("mongoose");
 var Schema = mongoose.Schema;
 var Tournament = mongoose.model("Tournament");
 var TournamentSchema = require("./tournament").TournamentSchema;

 var UserSchema = new Schema({
     name : String,
     email : String,
     password : String,
     tournaments : [TournamentSchema]
 });

 mongoose.model("User", UserSchema);

这是tournament.js

var mongoose = require("mongoose");
var Schema = mongoose.Schema;

var TournamentSchema = new Schema({
    name : String,
    location : String
});

mongoose.model("Tournament", TournamentSchema);
module.exports = TournamentSchema;

以下是我在控制器类中实例化新用户的方法:

var user = new User({
            name : name,
            email : email,
            password : password,
            tournaments : [
                {
                    name : "Trial by Combat",
                    location : "King's Landing"
                }
            ]
        });

我不完全确定我是否有这样的比赛"锦标赛:[TournamentScheme]"是说该变量将是TournamentSchemes数组的正确方法。如果有人有解决方案,如果你能告诉我我做错了什么,我将非常感激。

1 个答案:

答案 0 :(得分:3)

我发现了问题!对于可能遇到同样问题的人:

users.js中的这一行

var TournamentSchema = require("./tournament").TournamentSchema;

返回undefined因为我在tournament.js中错误地编写了module.exports行。为了解决这个问题,我将tournament.js中的最后两行更改为一行:

module.exports = mongoose.model("Tournament", TournamentSchema);

该行将正确导出模型对象,以便可以从users.js获取它的模式。然后,我将user.js中的上述行更改为:

var tournamentSchema = require("./tournament").schema;

为了测试它,我在我的控制器类中实例化了一个新的Tournament,然后将它推送到锦标赛阵列:

var t = new Tournament({
        name : "Trial by Combat",
        location : "King's Landing"
    });
var user = new User({
        name : name,
        email : email,
        password : password,
    });
user.tournaments.push(t);
// Save to db down here....

数据库已正确更新!