前言
Mongo 聚合查询
一般用mongo做数据库,涉及到关联查询情况不多,但是还有些情况要使用到,今天就讲下如何通过工具做关联查询,最终聚合结果,得到最终的查询结果集;
一、工具
一般使用mongo查询,我用两个工具,分别是官网指定工具 MongoDB Compass 和 Studio 3T
下面我将介绍在这两种工具中如何做关联查询 聚合结果
一般聚合查询分为四步
- 当前表的查询条件: $math
- 关联表与当前的关联信息: 关联表 关联字段 当前字段 关联表查询结果 $lookup
- 结构关联表查询结果: 默认为集合,需要结构为单个对象 $unwind
- 讲当前表和结构的关联查询结果属性拼接 $porject
这就得到了一个最终想要的结果
二、使用步骤
1.MongoDB Compass
- 连接好mongo 数据库
- 选中集合
- 点击聚合: Aggregations
- 点击添加 Add Stage
每次添加应该加的Stage类型,按照顺序添加,并设置查询条件即可
2.Studio 3T
- 连接好mongo 数据库
- 选中集合
- 点击聚合: Aggregations
- 点击添加 Add Stage
二、举个栗子
我想查询购买记录,然后关联查询出用户信息,返回用户名称
- 类似的sql如下
select address.*,user.username
form address left join user on user.id= address.publish_by
where address.publish = 1
- 开始操作,以Studio 3T为例
db.getCollection("address").aggregate(
// Pipeline
[
// Stage 1
{
$match: {
// enter query here
builtin:0
}
},
// Stage 2
{
$lookup: {
from: "user",
localField: "publishBy",
foreignField: "phone",
as: "users"
}
},
// Stage 3
{
$lookup: {
from: "conversation",
localField: "code",
foreignField: "code",
as: "conversations"
}
},
// Stage 4
{
$unwind: {
path: "$users"
}
},
// Stage 5
{
$project: {
// specifications
"name":"$name","code":"$code","username":"$users.username","count":{$size:"$conversations"}
}
}
],
// Options
{
}
// Created with Studio 3T, the IDE for MongoDB - https://studio3t.com/
);
总结
初次之外,Studio 3T还有一个功能,那就是通过sql 直接生成 mongo查询语句,并且可以直接粘贴代码