mongoDB中聚合aggregate使用(二)
本文于1614天之前发表,文中内容可能已经过时。
在之前的博文mongoDB中聚合aggregate使用中,我简单的介绍了一些常用的aggregate方法,在这篇文章中,我主要介绍另外的几个比较常用方法。
好文推荐
在使用和测试方法时,我在网上找到了这篇教程,很详细,且是中文文档,值得一读
MongoDB学习笔记
方法介绍
$lookup
- 用于对同一数据库中的另外一个非分片集合执行左外连接操作,相当于
left join
用法
1 | { |
测试数据
订单表
1 | db.orders.insert([ |
物品表
1 | db.inventory.insert([ |
示例
1 | 订单左外连接库存 |
1 | // 输出文档示例(只示例一条结果) |
$replaceRoot
- 提升输入文档中的一个内嵌文档,将其作为根文档,代替原有文档,简单理解就是使用结果代替原有文档后继续操作,相当于mysql之类将查询到的结果生成一个虚拟表,再进行操作
- 多用于一个Object字段
- 和
$mergeObjects
、$lookup
配合使用更佳
用法
1 | { |
测试数据
用户表
1 | db.people.insert([ |
示例
将pets
字段信息提取出来形成一张表
1 | db.people.aggregate([ |
1 | // 输出文档示例 |
## $mergeObjects > 3.6以上版本才可以使用
- 顾名思义,用于合并对象
- 和
$replaceRoot
、$lookup
配合使用更佳
用法
1 | 对单个字段或对象使用 |
官方演示:
测试数据
使用上述$lookup
测试数据
示例
上述使用$lookup
结果如下
1 | // 输出文档示例(只示例一条结果) |
添加使用$mergeObjects:
1 | db.orders.aggregate([ |
1 | // 输出文档示例(只示例一条结果) |
$addFields
- 为每个输入文档添加额外的字段,可以用来处理数据
用法
1 | { $addFields: { <newField>: <expression>, ... } } |
测试数据
1 | db.scores.insert([ |
示例
1 | db.scores.aggregate([ |
1 | { |
示例2
在使用$lookup
将数据中的字符串转为ObjectId
1 | { $addFields: { "新字段名称": { "$toObjectId": "$字段名" }}}, |
$sortByCount
- 根据指定表达式的值对输入文档进行分组,并且计算每个分组中文档的数量,相当于
$group
和$sort
组合使用
用法
1 | { $sortByCount: <expression> } # 字段名,需要添加$ |
赏
微信打赏
你的赞赏是对我最大的鼓励