gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章MongoDB多表关联查询操作实例详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

Mongoose的多表关联查询 。

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

student表:

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

calss表:

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

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

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

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

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

1. student表(student.js) 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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) 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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) 。

?
1
2
3
4
5
6
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) 。

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

· Model进行数据的查询操作 。

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

?
1
2
3
4
5
6
7
StudentSchema.static = {
   fetch: function (cb){
  return this
    .find({})
    .sort( 'meta.updateAt' ) //按更新的时间排序
   }
}

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

?
1
2
3
4
5
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'     } ] 。

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

?
1
2
3
4
5
6
7
8
9
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定义关联 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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数据库程序设计有所帮助.

原文链接:https://blog.csdn.net/WaterSprite_ct/article/details/78500997 。

最后此篇关于MongoDB多表关联查询操作实例详解的文章就讲到这里了,如果你想了解更多关于MongoDB多表关联查询操作实例详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com