【问题标题】:Saving Nested Schemas in Mongoose在 Mongoose 中保存嵌套模式
【发布时间】:2015-11-12 00:46:05
【问题描述】:

我正在尝试使用 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);

这里是锦标赛.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 数组。如果有人有解决方案,如果您也能指导我解决我做错了什么,我将不胜感激。

【问题讨论】:

    标签: node.js mongodb mongoose jsonschema


    【解决方案1】:

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

    users.js 中的这一行

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

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

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

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

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

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

    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....
    

    数据库已正确更新!

    【讨论】:

      猜你喜欢
      • 2014-03-02
      • 2015-07-18
      • 2016-03-22
      • 2017-07-06
      • 1970-01-01
      • 2020-04-22
      • 2017-06-12
      • 1970-01-01
      相关资源
      最近更新 更多