Mongoose.js:强制总是填充

时间:2014-02-06 01:36:51

标签: javascript node.js mongodb mongoose

有没有办法指示模型填充ALWAYS某个字段?

在任何查找查询中填充“字段”的内容:

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

3 个答案:

答案 0 :(得分:32)

使用Mongoose 4.0,您可以使用查询挂钩自动填充您想要的任何内容。

以下示例来自Valeri Karpov的introduction document

架构的定义:

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

查询挂钩以自动填充:

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

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

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

答案 1 :(得分:3)

此插件是您问题的解决方案:

https://www.npmjs.com/package/mongoose-autopopulate

答案 2 :(得分:0)

我使用查询挂钩自动填充,但不适用于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

如果我创建新的Project,则不会同时填充created_byupdated_by

findfindOne可以正常工作。

我该怎么做才能始终填充created_byupdated_by