Mongoose.js: сила всегда заполняется

Есть ли способ проинструктировать модель заполнить ВСЕГДА в определенном поле?

Что-то вроде, чтобы "поле" заполнялось в любом запросе поиска:

{field: Schema.ObjectId, ref: 'Ref', populate: true}

?

Ответы

Ответ 1

С Mongoose 4.0 вы можете использовать Query Hooks, чтобы автопопулить все, что вы хотите.

Ниже приведен пример из вводного документа Валери Карпова.

Определение схем:

var personSchema = new mongoose.Schema({
  name: String
});

var bandSchema = new mongoose.Schema({
  name: String,
  lead: { type: mongoose.Schema.Types.ObjectId, ref: 'person' }
});

var Person = mongoose.model('person', personSchema, 'people');
var Band = mongoose.model('band', bandSchema, 'bands');

var axl = new Person({ name: 'Axl Rose' });
var gnr = new Band({ name: "Guns N' Roses", lead: axl._id });

Query Hook для автопопуляции:

var autoPopulateLead = function(next) {
  this.populate('lead');
  next();
};

bandSchema.
  pre('findOne', autoPopulateLead).
  pre('find', autoPopulateLead);

var Band = mongoose.model('band', bandSchema, 'bands');

Ответ 3

Я использую запрос ловушку для автоматического заполнения, но он не работает с create() и save() для измененных полей. Это мой код:

var autoPopulate = function(next) {
  this.populate('updated_by','name').populate('created_by','name');
  next();
};

ProjectSchema.pre('findOne', autoPopulate);
ProjectSchema.pre('find', autoPopulate);

Если я обновлю Project только created_by заполняется (updated_by изменен)

Если я создаю новый Project и created_by и updated_by не заполняются.

find и findOne работает без проблем.

Что я должен сделать, чтобы всегда заполнять оба: created_by и updated_by?