簡體   English   中英

當將我的Mongoose數據庫模式的實例放置在另一個模式中時,為什么會“廣播到未定義”?

[英]Why might one of my Mongoose DB schemas be being “cast to undefined” when instances of it are placed in a second schema?

我創建了一個名為Game的Mongoose DB模式,並創建了一個名為Player的第二個模式,其中包含上述Game模式對象的數組。 當我運行line player.games = [game]; 如下面的app.js片段所示,出現以下錯誤:

Cast to undefined failed for value “{ gameID: 551175ee7a81c2c10c000002, points: 10 }” at path “games”

請問我做錯了什么?

app / models / Game.js(整個文件):

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

var GameSchema = new Schema({
    _id :    false,
    id :     false,
    gameID : Schema.ObjectId,
    points : Number
});

module.exports = mongoose.model( "Game", GameSchema );

app / models / Player.js(整個文件):

var mongoose = require( "mongoose" );
var Game     = require( "../models/game" );
var Schema   = mongoose.Schema;

var PlayerSchema = new Schema({
    socialID : Number,
    games :    [ Game ] 
});

module.exports = mongoose.model( 'Player', PlayerSchema );

app.js(摘要):

router.route( '/players' ).post( function( req, res )
{
    var game = new Game();
    game.gameID = req.body.gameID;
    game.points = req.body.points;

    var player = new Player();
    player.socialID = req.body.socialID;
    player.games = [ game ];

    player.save(... etc.

chridam,謝謝。 您建議的解決方案不起作用,^但對其進行了一些小調整,就使它起作用。 我想知道您是否可以建議我的小調整是可以接受的解決方案,還是令人討厭的軟糖,甚至是第三種等等選擇?

^在“ var game = new Game()”處獲得“ TypeError:object is not a function”

所做的調整基本上是為game.js添加包裝器模型

編輯的game.js:

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

var Schema = new Schema({
    _id :    false,
    id :     false,
    gameID : Schema.ObjectId,
    points : Number
});

module.exports = mongoose.model( 'Game', Schema );

其他game_wrapper.js

var Game = require( '../models/game' );
module.exports = Game.Schema;

編輯的player.js:

var mongoose    = require( 'mongoose' );
var GameWrapper = require( '../models/game_wrapper' );
var Schema      = mongoose.Schema;

var Schema = new Schema({
    socialID : Number,
    games :    [ GameWrapper ]
});

module.exports = mongoose.model( 'Player', Schema );

編輯的app.js:

var Player = require( './app/models/player' );
var Game   = require( './app/models/game' );

router.route( '/players' ).post( function( req, res )
{
    var game = new Game({
        gameID: req.body.gameID,
        points: req.body.points
    });

    var player = new Player({
        socialID: req.body.socialID,
        games: [ game ]
    });

    player.save(...)
}

您正在將Game模型傳遞到父模式定義PlayerSchema而不是GameSchema模式對象。 在您的GameSchema模塊app / models / Game.js中,將其更改為:

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

var GameSchema = new Schema({
    _id :    false,
    id :     false,
    gameID : Schema.ObjectId,
    points : Number
});

module.exports = GameSchema;

然后將您的PlayerSchema定義更改為:

var mongoose = require( "mongoose" );
var GameSchema     = require( "../models/game" );
var Schema   = mongoose.Schema;

var PlayerSchema = new Schema({
    socialID: Number,
    games: [GameSchema] 
});

module.exports = mongoose.model( 'Player', PlayerSchema );

在路由中,將請求對象包裝到架構中:

router.route( '/players' ).post( function( req, res )
{
    var game = new Game({
        gameID: req.body.gameID,
        points: req.body.points
    });

    var player = new Player({
        socialID: req.body.socialID,
        games: [game]
    });

    player.save(...)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM