我正在开发一个快速/节点应用程序,使用mongodb和mongoose来模拟用户,玩家,团队等。在这些模型之间我使用ObjectIDs的引用,所以在玩家和团队之间有一个连接器模型RosterSpot持有一个team_id和player_id,两者都具有ObjectID的Schema类型。
无论如何,我在尝试在团队和玩家模型中引用RosterSpots时遇到了问题。我希望有一种方法可以让球员抓住他们所有的球队,反之亦然。首先,在roster_spot.js中给出此代码
// Synchronously load model dependecies, so foreign model calls can be made
var fs = require('fs');
var models_path = __dirname;
fs.readdirSync(models_path).forEach(function (file) {
if (~file.indexOf('.js')) require(models_path + '/' + file);
})
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;
var Team = mongoose.model('Team');
var Player = mongoose.model('Player');
var RosterSpotSchema = new Schema({
team_id: {type: ObjectId, required: true},
player_id: {type: ObjectId, required: true}
});
....
RosterSpotSchema.statics.getTeamsForPlayer = function(player_id, callback) {
this.getTeamIdsForPlayer(player_id, function(ids){
Team.find({ _id: { $in: ids } }, function(err, teams){
callback(teams);
});
});
};
...
这非常合适,因为这个RosterSpot模型调用Team.find()和Player.find()方法没有问题。
当我尝试在播放器或团队模型中使用以下方法在player.js中进行调用时出现问题:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var RosterSpot = mongoose.model('RosterSpot');
var PlayerSchema = new Schema({...});
...
PlayerSchema.methods.getTeams = function (callback) {
RosterSpot.getTeamsForPlayer(this._id, function(teams){
callback(teams);
})
};
当我有var RosterSpot = mongoose.model('RosterSpot');
时,它会抛出“MissingSchemaError:尚未为'RosterSpot'注册架构。”
我已经尝试通过require
和异步内容加载模型,但没有任何工作。
我原以为可能是我的测试环境可能会加载文件,但是当我启动服务器时它也会抛出该错误。知道这是否有可能会有所帮助,并且非常感谢对这个问题的任何见解。