加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 服务器 > 系统 > 正文

MangoDB中的多个表格连接查询如何编写

发布时间:2023-09-28 13:27:05 所属栏目:系统 来源:
导读: 我们在使用MongoDB时,经常需要进行MongoDB多表关联查询,因此多表关联查询也是需要掌握的内容,本文就给大家分享一下MongoDB多表关联查询实例,有需要的朋友可以看看。 首先,我们回忆一下,MySQL多表关联查

    我们在使用MongoDB时,经常需要进行MongoDB多表关联查询,因此多表关联查询也是需要掌握的内容,本文就给大家分享一下MongoDB多表关联查询实例,有需要的朋友可以看看。

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

    通过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多表关联查询的内容大家可以关注其他相关文章。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章