mongoDB表与表的关系及聚合管道查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongoDB表与表的关系及聚合管道查询相关的知识,希望对你有一定的参考价值。

参考技术A

MongoDB 中的关系可以是:

MongoDB 聚合管道(Aggregation Pipeline)
使用聚合管道可以对集合中的文档进行变换和组合。

管道操作符
$project 修改文档的结构,可以用来重命名、增加或删除文档中的字段。
$match 用于过滤文档。用法类似于 find() 方法中的参数。
$limit 用来限制MongoDB聚合管道返回的文档数
$skip 在聚合管道中跳过指定数量的文档,并返回余下的文档。
$sort 将输入文档排序后输出
$group 将集合中的文档进行分组,可用于统计结果
$lookup 可以引用其他集合的数据(表关联查询)

创建数据

MySql数据库之表与表的关系

关系一:一对一

例如:QQ表与QQDetail表,我们首先要找到主从关系,从而确定外键约束。在这两张表中,QQ表有两个属性(qqid与password);另一张表为QQDetail表有三个属性(qqid,name与address)。我们可以认为,一个QQ号只能对应一份含具体信息的表格。这两个表中,QQ表的qqid和QQDetail表的qqid都设为主键约束(数据唯一且不能为null)。

Table Data:


代码如下:

CREATE TABLE QQ(
	qqid INT PRIMARY KEY,
	PASSWORD VARCHAR(50) 
);
 
CREATE TABLE QQDetail(
	qqid INT PRIMARY KEY,
	NAME VARCHAR(50),
	address VARCHAR(50) 
);
 
ALTER TABLE QQDetail ADD CONSTRAINT fk_QQ_QQDetail FOREIGN KEY(qqid) REFERENCES QQ(qqid);

对应视图如下:

关系二:一对多(多对一)
一对多(1:n) 例如:班级和学生,部门和员工,客户和订单,分类和商品
建表原则:
在从表(多方)创建一个字段,字段作为外键指向主表(一方)的主键

一个班级对应多个学生。班级表对学生表:一对多。学生表对班级表:多对一

主表的主键作为从表的外键,实现一对多

关系三:多对多
例如:stu2和teacher表,即一个学生可以有多个老师,而一个老师也可以有多个学生。这种情况通常需要创建中间表来处理多对多关系。例如再创建一张表tea_stu2_real表,给出两个外键,一个相对stu2表的外键,另一个相对teacher表的外键。

代码如下:

CREATE TABLE teacher (
        tid INT PRIMARY KEY,
    	tname VARCHAR(20)
);
 
CREATE TABLE stu2(
        sid INT PRIMARY KEY,
        sname VARCHAR(20)
);
 
CREATE TABLE tea_stu2_real(
        tid INT,
        sid INT
);
	
ALTER TABLE tea_stu2_real ADD CONSTRAINT fk_tid FOREIGN KEY(tid) REFERENCES teacher(tid);
	
ALTER TABLE tea_stu2_real ADD CONSTRAINT fk_sid FOREIGN KEY(sid) REFERENCES stu2(sid);

视图如下:

总结:

1.一对一 :主键对主键:通过主键对应,将两张表的两条信息合并为一条数据信息。
2.一对多:主键对外键:主表的主键作为从表的外键,主表的一条信息对应从表的多条数据信息。
3.多对一:外键对主键:从表的外键作为主表的主键,从表的多条数据信息,对应主表的一条数据信息。
4.多对多:中间表给出外键分别对应其他表的主键。两张表的主键,分别对应关联表的外键,从而实现两表多对多。

以上是关于mongoDB表与表的关系及聚合管道查询的主要内容,如果未能解决你的问题,请参考以下文章

表与表的关系

多表查询

数据库表与表之间的关系

Mongo高级用法

表与表的关联关系

三十九表与表之间的三种关系