[英]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.