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、 bucketAutosortByCount等,用于对数据进行更高级的分组和排序操作。

aggregate 是 MongoDB 提供的 聚合管道的入口方法,用于执行多阶段的数据处理(如筛选、分组、排序、计算等)。
只有使用 aggregate 方法,才能使用 g r o u p 、 group、 groupsum、$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 } }
]);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28429.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

家政保洁维修行业有没有必要做小程序?

【家政创业必看】家政行业小程序值得做吗?4大核心优势告诉你! 随时随地下单:客户手机一键预约,告别找电话/翻页面的麻烦 品牌专业升级:精美界面服务详情用户评价,打造可信赖形象 营销神器&#xff1…

电力设备基础概念解析

设备 配变终端 配电主站 位于城市调度中心,负责全面监控和管理整个配网的运行状况。 配电子站 常常设立在 110kV/35kV 变电站内,它们像是一个个“分中心”,负责各自辖区内的监控任务。子站与所辖区域内的DTU/TTU/FTU等电力终端设备保持紧…

C++ 内存序在多线程中的使用

目录 一、内存顺序 二、 指令重排在多线程中的问题 2.1 问题与原因 2.2 解决方案 三、六种内存序 3.1 memory_order_relaxed 3.2 memory_order_consume 3.3 memory_order_acquire 3.4 memory_order_release 3.5 memory_order_acq_rel 3.6 memory_order_seq_cst 一、…

大模型+知识图谱:重塑企业制度标准管理

在数字化转型的浪潮中,制度标准管理领域正迎来一场革命性的变革。借助大模型和知识图谱等前沿人工智能技术,制度标准管理不再仅仅是简单的文档存储和检索,而是演变为一个智能化、高效化、精准化的管理体系。 1.关键技术 我们的制度标准管理…

FPGA学习(一)——DE2-115开发板编程入级

FPGA学习(一)——DE2-115开发板编程入级 一、实验目的 通过 1 位全加器的详细设计,深入掌握原理图输入以及 Verilog 的两种设计方法,熟悉 Quartus II 13.0 软件的使用流程,以及在 Intel DE2-115 开发板上的硬件测试过…

【大模型基础_毛玉仁】1.2 基于RNN的语言模型

【大模型基础_毛玉仁】1.2 基于RNN的语言模型 1.2 基于RNN的语言模型1.2.1 循环神经网络RNN1.2.2 基于RNN的语言模型1)概率说明:2)损失函数3)问题 1.2 基于RNN的语言模型 循环神经网络(RecurrentNeuralNetwork,RNN&am…

三参数水质在线分析仪:从源头保障饮用水安全

【TH-ZS03】饮用水安全是人类健康的重要保障,其质量直接关系到人们的生命健康。随着工业化、城市化的快速发展,水体污染问题日益严峻,饮用水安全面临着前所未有的挑战。为了从源头保障饮用水安全,科学、高效的水质监测手段必不可少…

MiniMind用极低的成本训练属于自己的大模型

本篇文章主要讲解,如何通过极低的成本训练自己的大模型的方法和教程,通过MiniMind快速实现普通家用电脑的模型训练。 日期:2025年3月5日 作者:任聪聪 一、MiniMind 介绍 基本信息 在2小时,训练出属于自己的28M大模型。…

后验概率估计

前言 本文隶属于专栏《机器学习数学通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见《机器学习数学通关指南》 正文 一、基本定义 🧮 …

错误: 加载主类时出现 LinkageError,java.lang.UnsupportedClassVersionError 解决方案

分析: 可能就是我们在配置完jdk的path时候,电脑没有重启idea还没有更新path环境jdk版本. 解决办法: 1.重启电脑 2.seting设置对应的jdk版本 Project Structure中设置jdk版本 运行就解决了 一键三连 一起学习 一起进步. 推动科技发展, 为科技赋能.

学习记录-用例设计编写

黑马测试视频记录 目录 一、 软件测试流程 二、测试用例编写格式 1、等价类法 2、边界值分析法 3、 判定表法 4、场景法​编辑 5、错误推荐法 一、 软件测试流程 二、测试用例编写格式 1、等价类法 2、边界值分析法 3、 判定表法 4、场景法 5、错误推荐法 时间紧任务重…

软件测试(三)——Bug篇

文章目录 Bug篇软件测试的生命周期BugBug的概念Bug的要素Bug的级别Bug的生命周期 与开发发生争执怎么办 Bug篇 大部分的Bug都是测试人员提出的,因此在Bug篇的开始会先介绍软件测试的生命周期。同时,了解软件测试的生命周期能帮助我们了解测试的工作&…

Source插件之GstBaseSrc源码剖析

gst插件流程分析先看init构造函数gst_base_src_init(本文流程主要基于filesrc插件讲解) static void gst_base_src_init (GstBaseSrc * basesrc, gpointer g_class) {GstPad *pad;GstPadTemplate *pad_template;basesrc->priv gst_base_src_get_ins…

React:Redux

Redux引入 Redux感觉像组件通信的中介 state存放被管理的状态 action是申请改哪些数据,传入什么参数 reducer是怎么修改数据 我的理解更像是action像一个储存方法的对象,reducer是具体的方法的实现,不同的方法实现也不一样 store是个仓库…

CoDrivingLLM

CoDrivingLLM 思路 1.输入和输出 输入 算法的输入包括车辆当前时刻的状态 S t S_t St​ ,这个状态包含了车辆的位置、速度、行驶方向等信息;以及参与协同驾驶的联网自动驾驶汽车列表C,用于确定需要进行决策的车辆集合。 输出 输出为车辆…

微信小程序接入deepseek

先上效果 话不多说&#xff0c;直接上代码&#xff08;本人用的hbuilder Xuniapp&#xff09; <template><view class"container"><!-- 聊天内容区域 --><scroll-view class"chat-list" scroll-y :scroll-top"scrollTop":…

xxxxx

从别人blog偷的~,自己复习用 爱奇艺 一面 介绍项目项目中用到的设计模式项目中如何处理高并发Redis集群Redis RDB 和 AOF原理Redis除了缓存和分布式锁还能干什么&#xff1f;数据库如何优化&#xff0c;索引的数据结构&#xff0c;多表联合如何优化RedissonAOP逻辑&#xff…

Yocto + 树莓派摄像头驱动完整指南

—— 从驱动配置、Yocto 构建&#xff0c;到 OpenCV 实战 在树莓派上运行摄像头&#xff0c;在官方的 Raspberry Pi OS 可能很简单&#xff0c;但在 Yocto 项目中&#xff0c;需要手动配置驱动、设备树、软件依赖 才能确保摄像头正常工作。本篇文章从 BSP 驱动配置、Yocto 关键…

总结(尚硅谷Vue3入门到实战,最新版vue3+TypeScript前端开发教程)

1.Vue简介 2020年9月18日&#xff0c;Vue.js发布版3.0版本&#xff0c;代号&#xff1a;One Piece 1.1.性能的提升 打包大小减少41%。 初次渲染快55%, 更新渲染快133%。 内存减少54%。 1.2.源码的升级 使用Proxy代替defineProperty实现响应式。 重写虚拟DOM的实现和Tree-Shak…

【五.LangChain技术与应用】【8.LangChain提示词模板基础:从入门到精通】

早上八点,你端着咖啡打开IDE,老板刚甩来需求:“做个能自动生成产品描述的AI工具”。你自信满满地打开ChatGPT的API文档,结果半小时后对着满屏的"输出结果不稳定"、"格式总出错"抓耳挠腮——这时候你真需要好好认识下LangChain里的提示词模板了。 一、…