MongoDB聚合查询:从入门到精通
文章目录
- 前言
- 一、工具
- 一般聚合查询分为四步
- 二、使用步骤
- 1.MongoDB Compass
- 2.Studio 3T
- 二、举个栗子
- 总结
前言
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 herebuiltin: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查询语句,并且可以直接粘贴代码