Mongoose在其他模型中引用模型

时间:2014-03-08 20:34:15

标签: node.js asynchronous express mongoose require

我正在开发一个快速/节点应用程序,使用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和异步内容加载模型,但没有任何工作。

但是,疯狂的是,我已经能够为用户和玩家调用这些方法,使用连接器模型Family,并且一切正常。我甚至不需要在users.js中初始化Family的变量,这很奇怪,但它有效...

我原以为可能是我的测试环境可能会加载文件,但是当我启动服务器时它也会抛出该错误。知道这是否有可能会有所帮助,并且非常感谢对这个问题的任何见解。

0 个答案:

没有答案