关于mongoose的关联查询,举例说明:
- 初始化3个Schema和3个model
var studentSchema = new Schema({
name : String,
age : String,
school: {
type: Schema.Types.ObjectId,
ref : 'school'
}
});
var schoolSchema = new Schema({
name : String,
students: [
{
type: Schema.Types.ObjectId,
ref : 'student'
}
],
city : {
type: Schema.Types.ObjectId,
ref : 'city'
}
});
var citySchema = new Schema({
name : String,
school: [
{
type: Schema.Types.ObjectId,
ref : 'school'
}
]
});
var Student = mongoose.model('student', studentSchema);
var School = mongoose.model("school", schoolSchema);
var City = mongoose.model("city", citySchema);
- 初始化数据
var city = new City({
name : '北京',
school: []
});
city.save(function (err, city) {
var school = new School({
name : 'Test',
students: [],
city : city._id
});
school.save(function (err, school) {
var student = new Student({
name : 'Tom',
age : 20,
school: school._id
});
student.save();
});
});
- 进行关联查询,进行查询的时候要把初始化的数据注释掉
Student.findOne({name: 'Tom'})
.populate({
path: 'school',
populate: {path: 'city'}
})
.exec(function (err, data) {
console.log(data.name + ' 所在学校为:' + data.school.name + ",所在城市为:" + data.school.city.name);
})
- 结果
Tom 所在学校为:Test,所在城市为:北京
网友评论