Mongoose子文件在单独的文件上,如何嵌入它们

时间:2013-12-10 17:42:22

标签: node.js mongodb express mongoose

我正在定义我的应用程序模型,我为每个模型定义了单独的文件,我的问题是,我需要创建一个使用子文档的模型,但那是在另一个文件上,我怎么能在我的模型上使用那个Schema?我的意思是我见过的所有例子都在同一个文件中声明了Child模型和Parent,例如:

var childSchema = new Schema({ name: 'string' });

var parentSchema = new Schema({
  children: [childSchema]
});

我有一个名为user.js的文件,用于定义用户模型:

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

var userSchema = new Schema({

  _id           : Schema.Types.ObjectId,
  username      : String,

});


module.exports = mongoose.model( 'User', userSchema );

在另一个名为sport.js的文件中,我有另一个运动模型定义:

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

var sportSchema = new Schema({

  _id       : Schema.Types.ObjectId,
  name      : String

});

module.exports = mongoose.model( 'Sport', sportSchema );

因此,在我的用户模型中,我需要为用户将遵循的体育定义一个字段,但我不知道如何定义该子文档,因为体育定义在另一个文件上,我试过这个:

var mongoose  = require('mongoose');
var Schema    = mongoose.Schema;
var SportsModel = require('sport');

var userSchema = new Schema({

  _id           : Schema.Types.ObjectId,
  username      : String,
 sports         : [SportsModel]

});


module.exports = mongoose.model( 'User', userSchema );

但我不确定这是否正确,因为我出口的是模型,而不是Schema。

在此先感谢,我想在单独的文件上定义每个模型以维持秩序。

2 个答案:

答案 0 :(得分:49)

您可以通过其schema属性访问Model的架构。所以这应该有效:

var userSchema = new Schema({    
  _id           : Schema.Types.ObjectId,
  username      : String,
  sports        : [SportsModel.schema]    
});

答案 1 :(得分:9)

使用ref

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

var userSchema = new Schema({
    _id     : Schema.Types.ObjectId,
    username: String,
    sports  : [{ type: Schema.Types.ObjectId, ref: 'Sport' }]
});

module.exports = mongoose.model('User', userSchema);

顺便说一句,使用ref时,您可以在查询时使用.populate('sports'),而mongoose会为您扩展这些类型。