mongoose populate 方法
populate 是 Mongoose 用于把 ObjectId 引用字段解析成真实文档的方法,便于在查询结果中直接拿到关联对象。
来源整理自:vue3js.cn 面试官系列
简述
将查询到的数据中保存的引用 ID,替换为真实被引用文档的内容;可通过 select 选择需要或不需要返回的字段。
补充
补充:
populate的常见用法与注意事项。
const Tour = require('./models/Tour');
// 1) 单字段 populate:把 guides 字段由 id 数组填充为 User 文档数组
const tour = await Tour.findById(req.params.id).populate({
path: 'guides',
select: '-__v -passwordResetToken -passwordResetExpires'
});
// 2) 嵌套 populate:populate 的对象本身就支持继续 populate
await Tour.findById(id).populate({
path: 'guides',
populate: { path: 'posts', select: 'title' },
});
// 3) 查询中间件:每次 find 自动 populate
tourSchema.pre(/^find/, function (next) {
this.populate({ path: 'guides', select: 'name role' });
next();
});
populate本质上是额外的一次 find,会发送多条 SQL/mongo 查询;大批量场景下请使用lean()或手动$lookup。- 字段必须是
ref指向的ObjectId,否则populate不会生效。 - 性能优化:
.populate({ match: { active: true } })可先过滤再回填。



