千家信息网

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

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文实例讲述了MongoDB多表关联查询操作。分享给大家供大家参考,具体如下:Mongoose的多表关联查询首先,我们回忆一下,MySQL多表关联查询的语句:student表:calss表:通过stu
千家信息网最后更新 2026年11月01日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数据库程序设计有所帮助。

查询 数据 关联 模式 模型 联合 实例 关键 学生 方法 时间 班级 更新 编译 模块 目录 结构 结果 静态 张三 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 鸠鸠互联网科技 互联网金融与金融科技 远信互联网科技 天津摩尔互联网科技 亿账通互联网科技 互联网科技咨询 天速互联网络科技有限公司 中国科技互联网公司收入 剑昆互联网络科技有限公司临桂 字节跳动和互联网科技 洛阳昕诺飞互联网科技有限公司 互联网科技和信息 本届互联网博览会上的黑科技 上海钢联属于互联网科技股吗 广州千川互联网科技有限公司 云南省自由互联网科技有限公司 互联网科技包装股份有限公司上市 易企秀互联网科技是做什么的 容联科技互联网电商 美国五大互联网科技公司市值多少 南京欣网互联网络科技有限公司 齐家互联网科技 浩特互联网科技 互联网养老 桔豆科技 海南购全球互联网科技 恒生科技互联网指数分析 民营互联网公司国防科技 互联网科技实习生岗位 互联网金融金融科技 平安好医生打造互联网科技医疗
0