文章目錄
- 前言
- 一、工具
- 一般聚合查詢分為四步
- 二、使用步驟
- 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查詢語句,并且可以直接粘貼代碼