Mongodb 的多表查询讲解|学习笔记

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 快速学习 Mongodb 的多表查询讲解

开发者学堂课程【场景实践 - 基于MongoDB实现商品管理系统Mongodb的多表查询讲解】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/728/detail/13002


Mongodb的多表查询讲解

内容介绍:

一、类似于关系型数据库中的where查询

二、多表查询

 

一、类似于关系型数据库中的 where 查询

需求:查询 age 是23的人的信息

代码如下所示:

先查询所有信息,再查询age为23的人的信息。

db.persons.find()

{"_id”: ObjectId("5aa8debebaf95f1915073eaf"),"name" : " zhangsan","age”:23,"email":"17161717@qqom","c”:89,”m”: 78,"e" : 99,"country" : "china", "books": [“Js",“JAVA","MKONCODB”]}

{"_id":0bjectId("5aa8debebaf95f1915073eb0"),"nane”:"linchong"," age" : 20,"emai1":"234681717@qq.com" "c”:82,“m”:38,“e”:69,“country”:“china”,“books”:[“JS”,“PHP”,“MNGDB”]}

{"_id" : ObjectId("5aa8debebaf95f1915073eb1"),"name": "1uzhishen",“age: 23,"email”:"171615151@qq.com"c": 23,“m”:98,"e":100,"country": "china","books":[“Jquery"' “"JAVA",“ MONGODB" ] }

{"_id” : Objectid("5a8debebaf9511915073eb2"),"name": " songjiang", " age" : 33, " enaj1":"1781918717@qq.com","c" :89,“m”: 78,"e" : 99," country": " china", "books" : [ "mysql","JAVA",“MIONGODB"]}

{"_id" : ObjectId("5aa8debebaf95f1915073eb3"), " mnane": "wusong , " age”: 28, " email”:“"123456@qq.com " c": 76, "h”: 32,"e” : 99," country" :"Korea","books" : [ “C++","JAVA",“C"]}

{"_id":ObjectId("5aa8debebaf95f1915073eb4"),"name": likui","age" : 43, "email”:"234567@qq.con" "c”:23,"m":46,“e”:10,“country”:“USA”,“books”:[“jsp”,“JAVA”,“MNGDB”]}

{"_id" : ObjectId("5aa8debebaf95f1915073eb5*7),,"nane" : " shigian","age": 23," email" :"8171717@qq.com","c": 19, "m" : 88,“e” : 99,"country": "china",“books" : [ "mysql","oracle",“MONGODB"]}

{"_id" : 0biectId("5aa8debebaf9511915073eb6"),"name" : "wuyong", " age":32, " email”:"17827277@qq.com , " "c”: 76,"m":88,"e”:99,"country":"USA",“books" : [ “C++","hibernate",“C”]}

db. persons.find( {"age":23})

{"_id”: ObjectId("5aa8debebaf95f1915073eaf"),"name" : " zhangsan","age”:23,"email":"17161717@qqom","c”:89,”m”: 78,"e" : 99,"country" : "china", "books": [“Js",“JAVA","MKONCODB”]}

{"_id" : ObjectId("5aa8debebaf95f1915073eb1"),"name": "1uzhishen",“age: 23,"email”:"171615151@qq.com"c": 23,“m”:98,"e":100,"country": "china","books":[“Jquery"' “"JAVA",“ MONGODB" ] }

{"_id" : ObjectId("5aa8debebaf95f1915073eb5*7),,"nane" : " shigian","age": 23," email" :"8171717@qq.com","c": 19, "m" : 88,“e” : 99,"country": "china",“books" : [ "mysql","oracle",“MONGODB"]}

说明:db. persons.find( {"age":23}),在MySQL数据库中相当于select * from persons where age=23

需求二:查询age是23,并且 name 是 songjiang 的人的 name,age,country.

如果不想查询 id,输入_id=0

db.persons.find( {"age" : 33,"name" :" songjiang""),{name : 1, age: 1, country:1,_id:0} )

{"name" : "songjiang", "age" : 33,"country" : "china"}

 

二、多表查询

在 mongodb 中,多表查询可以有两种实现方案:嵌套和引用。比较常用的是嵌套。

1.嵌套

假设班级和学生之间的关系,属于一对多的关系。一个班级对应多个学生。

同时增加:

代码:var classes={id:1,name:"java",students:[[sid:1,name:"zhangsan"),

{sid:2,name:"lisi"}]};

db.classes.insert(classes);

代码如下:

var classes={id:1,name:"java",students:[[sid:1,name:"zhangsan"),

{sid:2,name:"lisi"}]};

db.classes.insert(classes);

db.classes.find()

{"_id" : ObjectId("5aa93338baf951915073eb7")," id”: 1,"name” : "java" " students": [ {"sid”: 1 "name": "zhangsan"],{ "sid" : 2,"name":"1isi" } ]}

可以看到,在 classes 中有一个 key 值为 students,而这个 students 描述了多个学生,所以是数组。这里 classes 与 students 就是 sql 中的一对多的关系。

需求一:查询班级是java的班级中第一个学生的id。

代码:

db.classes.find({"name":"java"}).forEach(function(e){printjson(e.students[0].sid)});

演示:{"_id" : ObjectId("5aa93338baf951915073eb7")," id”: 1,"name” : "java" " students": [ {"sid”: 1 "name": "zhangsan"],{ "sid" : 2,"name":"1isi" } ]}

db.classes.find({"name":"java"}).forEach(function(e){printjson(e.students[0].sid)});

1

出现1,说明需求一已经完成。

需求二:查询id为1的班级中的所有的学生

第一种方法如下:

db.classes.find( "id":1 , {"students":1, "_id":0})

{"students": [{ "sid”: 1,"name" :"zhangsan"), { "sid”: 2,"name" :"lisi" }]}

第二种方法:

db.classes.findOne().students

[

"sid”: 1,

"name" :"zhangsan"

},

{

"sid”: 2,

"name" :"lisi"

}

]

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
存储 JSON NoSQL
【BackEnd--Mongodb】学习笔记(完整详细版)
MongoDB是一种面向文档的非关系型数据库,所谓的面向文档是一种类似JSON的结构,因此可以简单理解MongoDB存储的是各种各样的JSONMongoDB可以快速开发web型应用,因为存储的是JSON格式,因此无需像关系型数据库那样需要建表,非常的的灵活。
266 0
|
NoSQL 关系型数据库 MySQL
|
存储 监控 NoSQL
MongoDB 快速入门-MongoDB 最佳实践(二)|学习笔记
快速学习 MongoDB 快速入门-MongoDB 最佳实践(二)
479 0
MongoDB 快速入门-MongoDB 最佳实践(二)|学习笔记
|
NoSQL 算法 Linux
MongoDB学习笔记(五) 集群搭建之副本集
MongoDB学习笔记(五) 集群搭建之副本集
411 0
|
NoSQL Linux MongoDB
MongoDB学习笔记(四) 集群搭建之主从复制
MongoDB学习笔记(四) 集群搭建之主从复制
592 0
|
分布式计算 NoSQL MongoDB
MongoDB学习笔记(三) 聚合
MongoDB学习笔记(三) 聚合
129 0
|
JSON NoSQL 关系型数据库
MongoDB学习笔记(二) 增删改查
MongoDB学习笔记(二) 增删改查
192 0
|
NoSQL 数据可视化 Linux
MongoDB学习笔记(一) 安装配置
MongoDB学习笔记(一) 安装配置
974 0
|
存储 缓存 NoSQL
Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存|学习笔记
快速学习 Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存
Spring Boot2.5 实战 MongoDB 与高并发 Redis 缓存|学习笔记
|
存储 SQL JSON
走进 MongoDB|学习笔记
快速学习走进 MongoDB
235 0
走进 MongoDB|学习笔记