Javascript 为什么我的Mongoose DB模式可能是;“铸造到未定义的”;当它的实例放在第二个模式中时?
我已经创建了一个名为Game的Mongoose DB模式,以及另一个名为Player的模式,其中包含所述游戏模式对象的数组。当我运行测线时,player.games=[game]如下面的app.js代码片段所示,我得到以下错误:Javascript 为什么我的Mongoose DB模式可能是;“铸造到未定义的”;当它的实例放在第二个模式中时?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我已经创建了一个名为Game的Mongoose DB模式,以及另一个名为Player的模式,其中包含所述游戏模式对象的数组。当我运行测线时,player.games=[game]如下面的app.js代码片段所示,我得到以下错误: Cast to undefined failed for value “{ gameID: 551175ee7a81c2c10c000002, points: 10 }” at path “games” 请问我做错了什么 app/models/Game.js(整个文件
Cast to undefined failed for value “{ gameID: 551175ee7a81c2c10c000002, points: 10 }” at path “games”
请问我做错了什么
app/models/Game.js(整个文件):
app/models/Player.js(整个文件):
app.js(代码片段):
您正在将
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(...)
}
您正在将
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(...)
}
您正在将
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(...)
}
您正在将
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(...)
}
克丽丹,谢谢你。您建议的解决方案不起作用,^但通过对其进行一些小调整,我使其起作用。我想知道你是否可以建议我的小调整是一个可以接受的解决方案,还是一个令人讨厌的软糖,甚至是第三种选择,请 ^正在“var game=new game()”处获取“TypeError:对象不是函数” 调整基本上是为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(...)
}
克丽丹,谢谢你。您建议的解决方案不起作用,^但通过对其进行一些小调整,我使其起作用。我想知道你是否可以建议我的小调整是一个可以接受的解决方案,还是一个令人讨厌的软糖,甚至是第三种选择,请 ^正在“var game=new game()”处获取“TypeError:对象不是函数” 调整基本上是为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(...)
}
克丽丹,谢谢你。您建议的解决方案不起作用,^但通过对其进行一些小调整,我使其起作用。我想知道你是否可以建议我的小调整是一个可以接受的解决方案,还是一个令人讨厌的软糖,甚至是第三种选择,请 ^正在“var game=new game()”处获取“TypeError:对象不是函数” 调整基本上是为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(...)
}
克丽丹,谢谢你。您建议的解决方案不起作用,^但通过对其进行一些小调整,我使其起作用。我想知道你是否可以建议我的小调整是一个可以接受的解决方案,还是一个令人讨厌的软糖,甚至是第三种选择,请 ^正在“var game=new game()”处获取“TypeError:对象不是函数” 调整基本上是为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.js中的第二个变量
Schema
更改为GameSchema
,因为还有另一个Schema
mongoose对象,然后进行必要的级联更新。除此之外,我认为你的工作变化没有任何问题。你可以通过打勾来接受你的答案作为解决方案。谢谢chridam,我会的。MJB.您可能应该将game.js中的第二个变量Schema
更改为GameSchema
,因为还有另一个Schema
mongoose对象,然后执行必要的级联更新。除此之外,我认为你的工作变化没有任何问题。你可以通过打勾来接受你的答案作为解决方案。谢谢chridam,我会的。MJB.您可能应该将game.js中的第二个变量Schema
更改为GameSchema
,因为还有另一个Schema
mongoose对象,然后执行必要的级联更新。除此之外,我认为你的工作变化没有任何问题。你可以通过打勾来接受你的答案作为解决方案。谢谢chridam,我会的。MJB.您可能应该将game.js中的第二个变量Schema
更改为GameSchema
,因为还有另一个Schema
mongoose对象,然后执行必要的级联更新。除此之外,我没有看到任何