IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MongoDB数据库入门(四) MongoDB的高级查询 、MongoDB多表关联查询、aggregate聚合管道 -> 正文阅读

[大数据]MongoDB数据库入门(四) MongoDB的高级查询 、MongoDB多表关联查询、aggregate聚合管道

一、关系型数据库表(集合)与表(集合)之 间的几种关系

1、一对一的关系

例如:一个人对应一个唯一的身份证号,即为一对一的关系。
在这里插入图片描述

2、一对多的关系

例如:一个班级对应多名学生,一个学生只能属于一个班级,即为一对多关系
在这里插入图片描述
在这里插入图片描述

3、多对多的关系

例如:一个学生可以选多门课程,而同一门课程可以被多个学生选修,彼此的对应关系 即是多对多关系
在这里插入图片描述

二、MongoDB 聚合管道(Aggregation Pipeline)

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

实际项目:表关联查询、数据的统计

MongoDB 中使用 db.COLLECTION_NAME.aggregate([{<stage>},…]) 方法 来构建和使用聚合管道。先看下官网给的实例,感受一下聚合管道的用法。
在这里插入图片描述

三、MongoDB Aggregation 管道操作符与表达式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、 $project

修改文档的结构,可以用来重命名、增加或删除文档中的字段。
要求查找 order 只返回文档中 trade_no 和 all_price 字段

db.order.aggregate([ 
	{ 
		$project:{ trade_no:1, all_price:1 } 
	} 
])

在这里插入图片描述

五、 $match

作用
用于过滤文档。用法类似于 find() 方法中的参数。

db.order.aggregate([ 
	{ 
		$project:{ trade_no:1, all_price:1 } 
	}, 
	{ 
		$match:{all_price:{$gte:90}} 
	} 
])

在这里插入图片描述

六、 $group

将集合中的文档进行分组,可用于统计结果。
统计每个订单的订单数量,按照订单号分组

db.order_item.aggregate([ 
	{ 
		$group: {_id: "$order_id", total: {$sum: "$num"}} 
	} 
])

在这里插入图片描述

七、 $sort

将集合中的文档进行排序。

db.order.aggregate([ 
	{ 
		$project:{ trade_no:1, all_price:1 } 
	}, 
	{ 
		$match:{"all_price":{$gte:90}} 
	}, 
	{ 
		$sort:{"all_price":-1} 
	} 
])

在这里插入图片描述

八、 $limit

db.order.aggregate([ 
	{ 
		$project:{ trade_no:1, all_price:1 } 
	}, 
	{ 
		$match:{"all_price":{$gte:90}} 
	}, 
	{ 
		$sort:{"all_price":-1} 
	},
	{ 
		$limit:1 
	}
])

在这里插入图片描述

九、 $skip

db.order.aggregate([ 
	{ 
		$project:{ trade_no:1, all_price:1 } 
	}, 
	{ 
		$match:{"all_price":{$gte:90}} 
	}, 
	{ 
		$sort:{"all_price":-1} 
	},
	{ 
		$skip:1 
	}
])

在这里插入图片描述

十、 $lookup 表关联

db.order.aggregate([ 
	{ 
		$lookup: { 
			from: "order_item", //关联那个集合
			localField: "order_id", //当前集合关联的字段
			foreignField: "order_id", //关联集合的关联字段
			as: "items"  //最终结果放在items里
		} 
	} 
])

结果

{
	"_id": ObjectId("620268eeec03ddfd5f5c6a7a"),
	"order_id": "1",
	"uid": 10,
	"trade_no": "111",
	"all_price": 100,
	"all_num": 2,
	"items": [{
		"_id": ObjectId("62026907ec03ddfd5f5c6a7d"),
		"order_id": "1",
		"title": "商品鼠标 1",
		"price": 50,
		"num": 1
	}, {
		"_id": ObjectId("6202690dec03ddfd5f5c6a7e"),
		"order_id": "1",
		"title": "商品键盘 2",
		"price": 50,
		"num": 1
	}, {
		"_id": ObjectId("62026912ec03ddfd5f5c6a7f"),
		"order_id": "1",
		"title": "商品键盘 3",
		"price": 0,
		"num": 1
	}]
} {
	"_id": ObjectId("620268f4ec03ddfd5f5c6a7b"),
	"order_id": "2",
	"uid": 7,
	"trade_no": "222",
	"all_price": 90,
	"all_num": 2,
	"items": [{
		"_id": ObjectId("62026918ec03ddfd5f5c6a80"),
		"order_id": "2",
		"title": "牛奶",
		"price": 50,
		"num": 1
	}, {
		"_id": ObjectId("6202691dec03ddfd5f5c6a81"),
		"order_id": "2",
		"title": "酸奶",
		"price": 40,
		"num": 1
	}]
} {
	"_id": ObjectId("620268fbec03ddfd5f5c6a7c"),
	"order_id": "3",
	"uid": 9,
	"trade_no": "333",
	"all_price": 20,
	"all_num": 6,
	"items": [{
		"_id": ObjectId("62026926ec03ddfd5f5c6a82"),
		"order_id": "3",
		"title": "矿泉水",
		"price": 2,
		"num": 5
	}, {
		"_id": ObjectId("6202692cec03ddfd5f5c6a83"),
		"order_id": "3",
		"title": "毛巾",
		"price": 10,
		"num": 1
	}]
}

关联查询后,找出all_peice大于90的item

db.order.aggregate([ 
	{ 
		$lookup: { 
			from: "order_item", //关联那个集合
			localField: "order_id", //当前集合关联的字段
			foreignField: "order_id", //关联集合的关联字段
			as: "items"  //最终结果放在items里
		},
		{ 
			$match:{"all_price":{$gt:90}} 
		}
	} 
])

结果

{
	"_id": ObjectId("620268eeec03ddfd5f5c6a7a"),
	"order_id": "1",
	"uid": 10,
	"trade_no": "111",
	"all_price": 100,
	"all_num": 2,
	"items": [{
		"_id": ObjectId("62026907ec03ddfd5f5c6a7d"),
		"order_id": "1",
		"title": "商品鼠标 1",
		"price": 50,
		"num": 1
	}, {
		"_id": ObjectId("6202690dec03ddfd5f5c6a7e"),
		"order_id": "1",
		"title": "商品键盘 2",
		"price": 50,
		"num": 1
	}, {
		"_id": ObjectId("62026912ec03ddfd5f5c6a7f"),
		"order_id": "1",
		"title": "商品键盘 3",
		"price": 0,
		"num": 1
	}]
}

十一、导入导出

在这里插入图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-09 20:46:17  更:2022-02-09 20:48:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 14:07:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码