Mongoose populate多表关联查询

关于mongoose的关联查询,举例说明:

  1. 初始化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);
  1. 初始化数据
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();
    });
});
  1. 进行关联查询,进行查询的时候要把初始化的数据注释掉
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);
})
  1. 结果
Tom 所在学校为:Test,所在城市为:北京
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,067评论 19 139
  • 参考深入浅出mongoose 连接mongoose mongoose连接数据库有两种方式第一种: 第二种: mon...
    bacbcc94613b阅读 12,370评论 1 27
  • 原文地址 本文简单的介绍了数据库,以及如何在 Node/Express 中应用他们。之后展示如何使用Mongoos...
    前端幼儿班阅读 5,207评论 1 5
  • 在曾今任职过的一家公司,经常需要开会,小团队的会议还好,一旦涉及高层或者多部门的会议,就恨不得把整个公司的人都叫来...
    fookhe阅读 358评论 0 0
  • 现在在上班的你,应该会有下班以后的几个小时的空余时间。那么,怎样利用这一小段时间来提升自己呢? 对于绝大多数人...
    我叫阿亮阅读 5,935评论 0 6