链接2个mongoose模式

时间:2013-02-06 13:49:14

标签: javascript mongodb mongoose

我有两个模式,TeamMatch。我想使用Team Schema来识别Match Schema中的小组。到目前为止,这是我的Team和Match JS文件。我想将团队架构链接到我的匹配架构,以便我可以简单地识别主队或客队,以便我在匹配架构中存储一个实际的Team对象。

这样我可以将主队称为Match.Teams.home.name = England(这只是一个例子)

Team.js

'use strict';

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

var validatePresenceOf = function(value){
  return value && value.length; 
};

var getId = function(){
  return new Date().getTime();
};

/**
  * The Team schema. we will use timestamp as the unique key for each team
  */
var Team = new Schema({
  'key' : {
    unique : true,
    type : Number,
    default: getId
  },
  'name' : { type : String,
              validate : [validatePresenceOf, 'Team name is required'],
              index : { unique : true }
            }
});

module.exports = mongoose.model('Team', Team);

以下是我正在尝试使用Match.js

'use strict';

var util = require('util');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var TeamSchema = require('mongoose').model('Team');

var validatePresenceOf = function(value){
  return value && value.length; 
};

var toLower = function(string){
  return string.toLowerCase();
};

var getId = function(){
  return new Date().getTime();
};

/**
  * The Match schema. Use timestamp as the unique key for each Match
  */
var Match = new Schema({
  'key' : {
    unique : true,
    type : Number,
    default: getId
  },
  'hometeam' : TeamSchema,
  'awayteam' : TeamSchema
});

module.exports = mongoose.model('Match', Match);

3 个答案:

答案 0 :(得分:2)

您的解决方案:使用实际架构,而不是使用架构的模型:

module.exports = mongoose.model('Team', Team);

module.exports = {
    model: mongoose.model('Team', Team),
    schema: Team
};

然后var definition = require('path/to/js');,然后直接使用definition.schema代替模型

答案 1 :(得分:2)

尝试在Match.js中使用Schema.Types.ObjectId

hometeam: { type: Schema.Types.ObjectId, ref: 'Team' } awayteam: { type: Schema.Types.ObjectId, ref: 'Team' }

答案 2 :(得分:1)

您不想嵌套模式。

尝试猫鼬中的人口:http://mongoosejs.com/docs/populate.html 这将解决您的问题。