在使用mongoose进行nodejs开发时,有很多场景都需要通过外键与另一张表建立关联,populate可以很方便的实现,因此总结一下populate的用法。
https://segmentfault.com/a/1190000002727265
首先,在建立模型时(schema),需要指定关联字段:
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var UserSchema = new Schema({ name : { type: String, unique: true }, }); var CommentSchema = new Schema({ commenter : { type: Schema.Types.ObjectId, ref: 'User' }, content : String });仔细观察上述代码,有一个陌生字段“ref”,在这里ref表示commenter通过ObjectId字段关联了User
:被关联的model的 type 必须是 ObjectId, Number, String, 和 Buffer 才有效)。
那么如何使用populate方法来跨表查询呢?
1.path
指定要查询的表
2.select(可选)
指定要查询的字段
3.model(可选)
类型:Model,可选,指定关联字段的 model,如果没有指定就会使用Schema的ref。
4.match(可选)
类型:Object,可选,指定附加的查询条件。
5.options(可选)
类型:Object,可选,指定附加的其他查询选项,如排序以及条数限制等等。
Catetory.find({_id:catId}) .populate({path:'movies',select:'title poster',options:{limit:5}}) .exec(function(err,catetories){ if (err) { console.log(err); } })