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

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.kler.cn/a/573936.html

相关文章:

  • 记录一个Circle CI出现的错误
  • Android MVI架构模式详解
  • SolidWorks 转 PDF3D 技术详解
  • vue左侧边框点击后让字体高亮
  • 多线程-线程本地变量ThreadLocal
  • 探秘基带算法:从原理到5G时代的通信变革【十】基带算法应用与对比
  • 前端基础之全局事件总线
  • vue表单已经赋值了,但是还是返回async-validator “xxx is required“提示,弹出验证红字而且不能输入
  • supervisord管理Gunicorn进程,使用Nginx作为反向代理运行flask web项目
  • 代理与 hosts 文件冲突问题解决方案
  • uniapp封装路由管理(兼容Vue2和Vue3)
  • 批量对 Word 优化与压缩,减少 Word 文件大小
  • 通信小贾的西天取经之路:从茫然小白到工业互联网售前
  • Java基础知识大全(含答案,面试基础)
  • FX-结构体
  • FusionInsight MRS云原生数据湖
  • 江科大51单片机笔记【8】LED点阵屏显示图形及动画(下)
  • Hive-优化(参数优化篇)
  • 扩散语言模型:从图像生成到文本创造的范式跃迁
  • 随手记录第十六话 -- Go 语言入门:基础知识与常用框架