mongoDB表与表的关系及聚合管道查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongoDB表与表的关系及聚合管道查询相关的知识,希望对你有一定的参考价值。
参考技术AMongoDB 中的关系可以是:
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表与表的关系及聚合管道查询的主要内容,如果未能解决你的问题,请参考以下文章