Подтвердить что ты не робот

Mongoose Sub-documents на отдельные файлы, как их внедрять

Я определяю свои модели приложений, и у меня есть отдельные файлы для каждой модели, которую я определяю, мой вопрос: мне нужно создать модель, использующую поддокумент, но в другом файле, как я могу использовать эту схему на моей модели? я имею в виду, что все примеры, которые я видел, объявляют модель Child и родительский файл в том же файле, например:

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 );

Но я не уверен, правильно ли это, так как я экспортирую модель, а не схему.

Заранее спасибо, я хочу определить каждую модель для отдельных файлов для поддержания порядка.

4b9b3361

Ответ 1

Вы можете получить доступ к схеме модели с помощью свойства schema. Поэтому это должно работать:

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

Ответ 2

Используйте 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 расширит эти типы для вас.