当前位置: 首页 > web >正文

MongoDB聚合查询:从入门到精通

文章目录

  • 前言
  • 一、工具
      • 一般聚合查询分为四步
  • 二、使用步骤
    • 1.MongoDB Compass
    • 2.Studio 3T
  • 二、举个栗子
  • 总结


前言

Mongo 聚合查询

一般用mongo做数据库,涉及到关联查询情况不多,但是还有些情况要使用到,今天就讲下如何通过工具做关联查询,最终聚合结果,得到最终的查询结果集;


一、工具

一般使用mongo查询,我用两个工具,分别是官网指定工具 MongoDB Compass 和 Studio 3T
下面我将介绍在这两种工具中如何做关联查询 聚合结果

一般聚合查询分为四步

  • 当前表的查询条件: $math
  • 关联表与当前的关联信息: 关联表 关联字段 当前字段 关联表查询结果 $lookup
  • 结构关联表查询结果: 默认为集合,需要结构为单个对象 $unwind
  • 讲当前表和结构的关联查询结果属性拼接 $porject

这就得到了一个最终想要的结果

二、使用步骤

1.MongoDB Compass

  1. 连接好mongo 数据库
  2. 选中集合
  3. 点击聚合: Aggregations
  4. 点击添加 Add Stage
    增加聚合查询条件
    每次添加应该加的Stage类型,按照顺序添加,并设置查询条件即可

2.Studio 3T

  1. 连接好mongo 数据库
  2. 选中集合
  3. 点击聚合: Aggregations
  4. 点击添加 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查询语句,并且可以直接粘贴代码
复制代码

http://www.xdnf.cn/news/7030.html

相关文章:

  • 现代健康生活养生指南
  • nodejs 文件的复制
  • 【人工智能】微调的艺术:将大模型塑造成你的专属智能助手
  • 大模型技术演进与应用场景深度解析
  • Type-C连接器:数字时代接口革命的终极答案
  • C语言中字符串函数的详细讲解
  • 2025年数字孪生技术最新应用案例:跨领域实践与技术趋势
  • OpenAI新发布Codex的全面解析
  • C语言输入函数对比解析
  • GPIO点亮LED
  • 使用UniApi调用百度地图API的需要注意的地方
  • 基于 jQuery 的轻量级在线画册、电子书、产品目录插件及使用
  • 粒子群算法(PSO算法)
  • RAGFlow Arbitrary Account Takeover Vulnerability
  • 广东省省考备考(第十三天5.17)—言语:中心理解题(听课后强化练习)
  • 3、ubantu系统 | 通过vscode远程安装并配置anaconda
  • C++中析构函数不设为virtual导致内存泄漏示例
  • 电子电路:电位器和可变电阻是同一个东西吗?
  • 2025年【道路运输企业安全生产管理人员】考试题库及道路运输企业安全生产管理人员考试内容
  • 获取淘宝店铺所有商品信息接口数据指南
  • JavaScript splice() 方法
  • 【C++】string的使用【上】
  • Linux面试题集合(6)
  • PIC16F18877 ADC 代码
  • Python绘制南丁格尔玫瑰图:从入门到实战
  • 专题四:综合练习(组合总和的暴搜dfs)
  • printf耗时高的原因
  • UE 材质基础 第一天
  • nginx集成防火墙ngx_waf的docker版
  • 重庆 ICPC 比赛游记