2014-01-09 10 views
3

У меня есть user.js файла, который содержит всю мой мангуст схему и методы, примерно так:мангуст лучших практики для объектов

var userSchema = mongoose.Schema({ 
    name: { type: String, required: true, trim: true }, 
    surname: { type: String, required: true }, 
}); 

var User = mongoose.model('User', userSchema); 

Теперь, это лучше, чтобы предоставить функции, которые моделируют данные? как это:

exports.addUser = function(data, next){ 
    user = new User(data); 
    user.save(next); 
}; 

exports.getAll = function(next){ 
    var query = User.find(); 
    query.exec(next); 
}; 

или подвергать только User объект, который будет использоваться в другом месте, как это?

module.exports = User; //or 
exports.User = User; 

Я также столкнулся с проблемой, полученный из второго раствора, предположим, я хочу, чтобы добавить список автомобилей, к моему userSchema и схема автомобиля определена в другом файле car.js, то это означает, что мне придется разоблачить carSchema для моего user.js файл, не так ли? Это означает, что я фактически сворачиваю второе решение, которое я изложил выше, а затем, каков правильный способ делать такие вещи?

+0

Я бы не распространял определение схемы для нескольких файлов для одного класса. – WiredPrairie

ответ

4

Интересный вопрос.

Это, вероятно, просто «синтаксический сахар», но я придерживаюсь второго варианта, потому что есть ИМХО, нет необходимости капсулировать поколение и т. Д. Mongoose - это обертка вокруг такого материала, и тогда можно использовать чистые модели мангуста и Схемы. Это кажется вам разумным?

exports.User = User; 
+2

Полностью согласен. Если возникнет необходимость в реализации пользовательских функций, связанных с моделью, у Mongoose есть интерфейсы для реализации [статические] (http://mongoosejs.com/docs/guide.html#statics) и [instance] (http://mongoosejs.com /docs/guide.html#methods). – robertklep

+0

Это имеет смысл, но что, если, как указано в вопросе, Пользователь также содержит другую схему? Представьте себе userSchema, который также имеет такие автомобили: 'cars: [carSchema]'. то мне также нужно иметь в car.js нечто вроде 'export.carSchema = mongoose.Schema ({whatever})'? – user3060636

+0

Надеюсь, я прав. Пожалуйста, взгляните на эту тему: https://gist.github.com/johannesboyne/8347861, как вы видите, я использовал этот метод мангуста 'orgas: [{type: mongoose.Schema.ObjectId, ref: 'Organization'}]' чтобы связать их, но из-за причины пришлось экспортировать обе схемы. Это правильно, потому что для каждой схемы в нашей MongoDB создается новая коллекция документов, не так ли? – johannesboyne