mongodb安装教程以及mongodb的使用
MongoDB是由C++语言编写的一种面向文档的NoSQL数据库,旨在为WEB应用提供可扩展的高性能数据存储解决方案。与传统的关系型数据库(如 MySQL 或 PostgreSQL)不同,MongoDB 存储数据的方式是以 BSON(类似于 JSON 的二进制格式)格式来存储文档,而不是使用表格和行。每个文档可以包含多个键值对,因此非常灵活,适合处理大规模的数据集。
MongoDB的基本概念
文档:MongoDB中的数据基本单位是文档,类似于JSON对象,可以包含各种数据类型,如数字、日期、字符串、数组和嵌入式文档等。
集合:集合是一组用途相同或类似的文档的集合,相当于传统关系型数据库中的表。但MongoDB中的集合不受严格模式的管制,其中的文档可根据需要采用稍微不同的结构。
MongoDB的作用
高效存储大规模数据:MongoDB 使用了非结构化的存储方式,可以处理比传统关系数据库更大的数据量。
高可扩展性:MongoDB 具有水平扩展的能力,即通过增加更多的机器来提高性能和容量。
灵活的数据结构:每个文档的结构可以不同,这让开发者可以根据需求灵活设计数据存储结构。
支持分布式存储:MongoDB 支持数据分片,能够在多个服务器上分布数据,从而提高查询性能和系统可用性。
强大的查询功能:MongoDB 提供了丰富的查询语法和聚合功能,支持复杂的数据检索和操作。
官方下载地址:https://www.mongodb.com/try/download/community
这里改一下自定义安装路径,其他不用动
服务是启动的,配置一下环境变量
查看一下版本
现在就可以使用navicat进行连接使用了
/*insertOne():用于向集合中插入单个文档。*/
db.collection.insertOne({name: "John", age: 30, email: "john@example.com"});/*find()方法查询*/
db.collection.find({name: "John"});
mongodb的使用
MongoDB的聚合操作提供了丰富的功能,允许用户对数据进行复杂的查询、过滤、分组、排序和其他转换操作。这些聚合操作主要分为三类:单一作用聚合、聚合管道和MapReduce(从MongoDB 5.0开始已被弃用,因此这里主要讨论前两类)。
先理解一些概念:
MongoDB中的文档相当于MySQL中的行,但文档是嵌套的键值对集合,可以包含多个层次的嵌套数据。
聚合管道(Aggregation Pipeline)
定义:由多个 阶段(Stage) 组成的链式操作,每个阶段是一个独立操作,如筛选( m a t c h )、分组( match)、分组( match)、分组(group)、排序($sort)等。
类比 MySQL:类似 SQL 中 SELECT + WHERE + GROUP BY + HAVING + ORDER BY 的组合,但更灵活。
聚合操作 vs 普通文档操作
特点
优点:语法简单,执行速度快。
缺点:功能单一,无法处理复杂逻辑(如多条件分组、嵌套计算)。
一、单一作用聚合
单一作用聚合是MongoDB提供的简化聚合操作,适用于单一目标的快速统计,无需复杂的数据处理流程。它们通常直接调用集合方法,执行简单计算(如计数、去重)。
二、聚合管道
聚合管道是一个数据聚合的框架,模型基于数据处理流水线的概念。文档进入多级管道,每个管道阶段对文档进行一系列运算,然后将结果文档输出给下一个阶段。聚合管道包含多个阶段操作符,常用的有:
$match:筛选文档,只返回满足条件的文档,类似于SQL中的WHERE子句。此阶段通常用于减少管道中的文档数量,以提高后续阶段的处理效率。
$project:修改输入文档的结构,主要用于包含、排除字段或添加计算字段。此阶段可以灵活控制输出文档的格式。
$group:根据指定的字段进行分组,并可以对分组后的文档执行聚合操作(如计数、求和等)。此阶段是聚合操作中的核心部分,用于对数据进行分组和统计。
$sort:对文档进行排序。此阶段可以对文档按照指定字段进行升序或降序排序。
$limit:限制返回的文档数量。此阶段用于控制输出结果的数量。
$unwind:将数组类型的字段拆分为多个文档。此阶段用于处理数组类型的字段,将每个数组元素拆分为一个独立的文档。
$lookup:进行左外连接,类似于SQL中的JOIN操作。此阶段用于将当前集合与其他集合进行关联查询,获取相关联的数据。
$out:将聚合结果输出到一个新集合。此阶段用于将聚合结果保存到指定的新集合中。
$replaceRoot:替换输入文档为指定的文档。此阶段通常用于改变文档的根结构。
$count:返回文档总数。此阶段用于统计满足条件的文档数量。
f a c e t :并行执行多条聚合管道,并将结果合并到一个单一的文档中。此阶段用于处理复杂的聚合需求,可以同时执行多个聚合操作并合并结果。此外,还有一些其他管道操作符如 facet:并行执行多条聚合管道,并将结果合并到一个单一的文档中。此阶段用于处理复杂的聚合需求,可以同时执行多个聚合操作并合并结果。 此外,还有一些其他管道操作符如 facet:并行执行多条聚合管道,并将结果合并到一个单一的文档中。此阶段用于处理复杂的聚合需求,可以同时执行多个聚合操作并合并结果。此外,还有一些其他管道操作符如bucket、 b u c k e t A u t o 、 bucketAuto、 bucketAuto、sortByCount等,用于对数据进行更高级的分组和排序操作。
aggregate 是 MongoDB 提供的 聚合管道的入口方法,用于执行多阶段的数据处理(如筛选、分组、排序、计算等)。
只有使用 aggregate 方法,才能使用 g r o u p 、 group、 group、sum、$avg 等聚合操作符(称为 聚合阶段操作符)。
示例:
// 插入示例数据
db.sales.insertMany([{_id: 1,product: "iPhone 15",category: "电子产品",price: 6999,quantity: 2,region: "华东",date: ISODate("2023-10-05")},{_id: 2,product: "羽绒服",category: "服装",price: 899,quantity: 5,region: "华北",date: ISODate("2023-10-12")},{_id: 3,product: "咖啡机",category: "家电",price: 1599,quantity: 1,region: "华南",date: ISODate("2023-11-02")},{_id: 4,product: "蓝牙耳机",category: "电子产品",price: 399,quantity: 10,region: "华东",date: ISODate("2023-11-15")}
]);
//筛选日期为 2023年10月 的订单,按 category 分组,计算每个类别的 总销售额(price × quantity),按总销售额降序排序。
db.sales.aggregate([// 阶段1:筛选日期范围{ $match: { date: { $gte: ISODate("2023-10-01"), $lt: ISODate("2023-11-01") }}},// 阶段2:计算每个订单的销售额(price * quantity){ $addFields: { totalSale: { $multiply: ["$price", "$quantity"] } }},// 阶段3:按category分组统计总销售额{ $group: { _id: "$category",totalSales: { $sum: "$totalSale" },avgSalePerOrder: { $avg: "$totalSale" },orderCount: { $sum: 1 } // 统计订单数量}},// 阶段4:按totalSales降序排序{ $sort: { totalSales: -1 } }
]);
相关文章:

mongodb安装教程以及mongodb的使用
MongoDB是由C语言编写的一种面向文档的NoSQL数据库,旨在为WEB应用提供可扩展的高性能数据存储解决方案。与传统的关系型数据库(如 MySQL 或 PostgreSQL)不同,MongoDB 存储数据的方式是以 BSON(类似于 JSON 的二进制格式…...
C# 中的多线程同步机制:lock、Monitor 和 Mutex 用法详解
在多线程编程中,线程同步是确保多个线程安全地访问共享资源的关键技术。C# 提供了几种常用的同步机制,其中 lock、Monitor 和 Mutex 是最常用的同步工具。本文将全面介绍这三种同步机制的用法、优缺点以及适用场景,帮助开发者在多线程开发中做…...

【通义万相】蓝耘智算 | 开源视频生成新纪元:通义万相2.1模型部署与测评
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能(AI)通过算法模拟人类智能,利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络(如ChatGPT&…...

期权帮|中证1000股指期权交割结算价怎么算?
期权帮锦鲤三三每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 中证1000股指期权交割结算价怎么算? 一、按照最后交易日结算价: (1)计算方法:最后交易日标的指数(…...
Python 面向对象高级编程-定制类
目录 __str__ __iter__ __getitem__ __getattr__ __call__ 小结 看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的。 __slots__我们已经知道怎么用了,__len__()方法我们也知道是为了能让class作用于len()…...

qt creator示例空白
通常情况下,进入qt后,就会弹出以下窗口: 但如果出现示例空白,那可能是因为 Qt Creator 无法正确识别 Qt 的安装路径或配置。 解决: 点击“添加”: 然后跳转到你的qmake.exe的目录,例如我的qmak…...
MyBatis-Plus 与 Spring Boot 的最佳实践
在现代 Java 开发中,MyBatis-Plus 和 Spring Boot 的结合已经成为了一种非常流行的技术栈。MyBatis-Plus 是 MyBatis 的增强工具,提供了许多便捷的功能,而 Spring Boot 则简化了 Spring 应用的开发流程。本文将探讨如何将 MyBatis-Plus 与 Spring Boot 进行整合,并分享一些…...
TDengine 中的标签索引
简介 本节说明 TDengine 的索引机制。在 TDengine 3.0.3.0 版本之前(不含),默认在第一列 TAG 上建立索引,但不支持给其它列动态添加索引。从 3.0.3.0 版本开始,可以动态地为其它 TAG 列添加索引。对于第一个 TAG 列上…...

工业自动化核心:BM100 信号隔离器的强大力量
安科瑞 吕梦怡 18706162527 BM100系列信号隔离器可以对电流、电压等电量参数或温度、电阻等非电量参数进行快速精确测量,经隔 离转换成标准的模拟信号输出。既可以直接与指针表、数显表相接,也可以与自控仪表(如PLC)、各种 A/D …...

Ascend开发板镜像烧录、联网、其他设备访问
Ascend开发板镜像烧录、联网、外部访问 1.1 Ascend开发板制卡方式一:镜像烧录 SD卡插入读卡器,读卡器插入PC的USB接口 烧录镜像前,先格式化一下SD卡 参考教程:格式化SD卡、修复烧写系统失败的SD卡 WinR,输入cmd DIS…...

Llama-Factory框架下的Meta-Llama-3-8B-Instruct模型微调
目录 引言 Llama - Factory 训练框架简介: Meta - Llama - 3 - 8B - Instruct 模型概述: Lora 方法原理及优势: 原理 优势 环境准备: 部署环境测试: 数据准备: 模型准备: 模型配置与训练࿱…...

MySQL进阶-分析查询语句EXPLAIN
概述 能做什么? 表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表之间的引用 每张表有多少行被优化器查询 官网介绍 https://dev.mysql.com/doc/refman/5.7/en/explain-output.html https://dev.mysql.com/doc/refman/8.0/…...
Python 高级编程与实战:构建数据可视化应用
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发、API 设计、网络编程、异步IO、并发编程、设计模式与软件架构、性能优化与调试技巧、分布式系统、微服务架构、自动化测试框架以及 RESTf…...

学习threejs,Animation、Core、CustomBlendingEquation、Renderer常量汇总
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️Animation常量汇总1.1.1 循…...
Java直通车系列14【Spring MVC】(深入学习 Controller 编写)
目录 基本概念 编写 Controller 的步骤和要点 1. 定义 Controller 类 2. 映射请求 3. 处理请求参数 4. 调用业务逻辑 5. 返回响应 场景示例 1. 简单的 Hello World 示例 2. 处理路径变量和请求参数 3. 处理表单提交 4. 处理 JSON 数据 5. 异常处理 基本概念 Cont…...
【蓝桥杯集训·每日一题2025】 AcWing 5539. 牛奶交换 python
AcWing 5539. 牛奶交换 Week 3 3月6日 题目描述 农夫约翰的 N N N 头奶牛排成一圈,使得对于 1 , 2 , … , N − 1 1,2,…,N−1 1,2,…,N−1 中的每个 i i i,奶牛 i i i 右边的奶牛是奶牛 i 1 i1 i1,而奶牛 N N N 右边的奶牛是奶牛 …...

Mybatis缓存机制(一级缓存和二级缓存)
前言 为什么要学习Mybatis 缓存机制? 学习Mybatis 缓存机制,可以有效解决 数据库的压力,提高数据库的性能。 例如:你要 对tb_user 表 ,查询 所有用户的信息,并且多次查询所有用户信息。我们知道第一次查询表信息流…...
设计模式--单例模式
一、单例模式代码实现 public class DatabaseConnection {// 1. 私有静态实例变量private static DatabaseConnection instance;// 2. 私有构造函数,防止外部直接创建实例private DatabaseConnection() {// 初始化数据库连接System.out.println("Database con…...

ubuntu22.04本地部署OpenWebUI
一、简介 Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台,旨在完全离线运行。它支持各种 LLM 运行器,如 Ollama 和 OpenAI 兼容的 API,并内置了 RAG 推理引擎,使其成为强大的 AI 部署解决方案。 二、安装 方法 …...

2025-3-7二叉树的线索化
一、中序线索化 代码其实就是和中序遍历相似,增加了两个标志位 ltag rtag。 完整的代码: 二、先序线索化: 三、后序线索化: 总结:其核心其实还是遍历算法的改造。 并且注意处理最后一个被访问的节点。...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...
初级程序员入门指南
初级程序员入门指南 在数字化浪潮中,编程已然成为极具价值的技能。对于渴望踏入程序员行列的新手而言,明晰入门路径与必备知识是开启征程的关键。本文将为初级程序员提供全面的入门指引。 一、明确学习方向 (一)编程语言抉择 编…...