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 } }
- ]);
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |