• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MongoDB多表关联查询操作实例详解

    本文实例讲述了MongoDB多表关联查询操作。分享给大家供大家参考,具体如下:

    Mongoose的多表关联查询

    首先,我们回忆一下,MySQL多表关联查询的语句:

    student表:

    calss表:

    通过student的classId关联进行查询学生名称,班级的数据:

    SELECT student.name,student.age,class.name FROM student,class WHERE student.classId = class.id

    Mongoose多表联合查询(还是以众所周知的学生、班级作为实例)

    · 表结构的定义(schemas目录下)

    1. student表(student.js)

    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    /*定义数据模式*/
    var StudentSchema = new mongoose.Schema({
      name: String,
      calssId: {
        type: Schema.Types.objectId,
        ref: 'class'
      },
      age: Number,
      number: Number,
      meta: {
        createAt: {
          type: Date,
          default: Date.now()
        },
        updateAt: {
          type: Date,
          default: Date.now()
        }
      }
      /*更新时间的*/
    });
    module.exports = StudentSchema;
    
    

    2. class表(class.js)

    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;
    /*定义数据模式*/
    var ClassSchema = new mongoose.Schema({
      name: String,
      meta: {
        createAt: {
          type: Date,
          default: Date.now()
        },
        updateAt: {
          type: Date,
          default: Date.now()
        }
      }
      /*更新时间的*/
    });
    module.exports = ClassSchema;
    
    

    · 生成Model(model目录下)

    1. student Model(student.js)

    var mongoose = require('mongoose');
    var StudentSchema = require('../schemas/student');
    /*通过model编译模式为模型*/
    var Student = mongoose.model('student', StudentSchema);
    /*导出Student模型 模块*/
    module.exports = Student;
    
    

    2. class Model(class.js)

    var mongoose = require('mongoose');
    var ClassSchema = require('../schemas/class');
    /*通过model编译模式为模型*/
    var Class = mongoose.model('class', ClassSchema);
    /*导出Class模型 模块*/
    module.exports = Class;
    
    

    · Model进行数据的查询操作

    1. 将静态类的方法加到Model的编译中

    StudentSchema.static = {
      fetch: function(cb){
     return this
       .find({})
       .sort('meta.updateAt') //按更新的时间排序
      }
    }
    
    

    2. 将静态类方法加到Model中

    StudentSchema.static('fetch', function(cb){
       return this
         .find({}, cb)
      .sort('meta.updateAt')
    })
    
    

    3. 直接调用model的find()方法

    查询的结果均为:

    [
        {
            _id: '5a05222f583e5720b8660191',
            name: '张三',
            age: 18,
            number: 11,
            classId: '5a0036512b740f32e4371e66'
        },
        {
            _id: '5a05222f583e5720b8660091',
            name: '李四',
            age: 19,
            number: 11,
            classId: '5a0036512b740f32e1371e66'
        },
        {
            _id: '5a05222f583e5720b18660191',
            name: '赵五',
            age: 17,
            number: 11,
            classId: '5a0036512b7420f32e4371e66'
        }
    ]

    · 多表联合查询(学生对应班级)

    StudentSchema.static = {
      findStudentWithClass: function (cb) {
        return this
          .find({})
          .populate('classId')//注意这是联合查询的关键
          .sort('meta.updateAt')
          .exec(cb)
      }
    }
    
    

    查询结果:

    [
        {
            _id: '5a05222f583e5720b8660191',
            name: '张三',
            age: 18,
            number: 11,
            classId: {
                _id: '5a0036512b740f32e4371e66',
                name: '一年1班'
            }
        },
        {
            _id: '5a05222f583e5720b8660091',
            name: '李四',
            age: 18,
            number: 11,
            classId: {
                _id: '5a0036512b740f32e1371e66',
                name: '二年2班'
            }
        },
        {
            _id: '5a05222f583e5720b18660191',
            name: '赵五',
            age: 18,
            number: 11,
            classId: {
                _id: '5a0036512b7420f32e4371e66',
                name: '一年2班'
            }
        }
    ]

    · 由上面的实例可知,mongoose的多表联合查询的关键:

    1. 数据模式结构定义需要利用关键字ref定义关联

    var Schema = new mongoose.Schema({
      field: {
     type: mongoose.Schema.Type.ObjectId,
     ref: 'model'
      }
    });
    Schema.static = {
      fetch: function(cb){
     return this
        .find({})
        .populate('field')
        .exec(cb)
     }
     }
    var Model = mongoose.Model('model',Schema );
    
    

    希望本文所述对大家MongoDB数据库程序设计有所帮助。

    您可能感兴趣的文章:
    • MongoDB中多表关联查询($lookup)的深入讲解
    • nodejs+mongodb aggregate级联查询操作示例
    • java操作mongodb之多表联查的实现($lookup)
    上一篇:express使用Mongoose连接MongoDB操作示例【附源码下载】
    下一篇:MongoDB模糊查询操作案例详解(类关系型数据库的 like 和 not like)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MongoDB多表关联查询操作实例详解 MongoDB,多表,关联,查询,操作,