mongodb安装教程以及mongodb的利用

打印 上一主题 下一主题

主题 1961|帖子 1961|积分 5883

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进行毗连利用了

  1. /*insertOne():用于向集合中插入单个文档。*/
  2. db.collection.insertOne({name: "John", age: 30, email: "john@example.com"});
  3. /*find()方法查询*/
  4. 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 等聚合操纵符(称为 聚合阶段操纵符)。
示例:
  1. // 插入示例数据
  2. db.sales.insertMany([
  3.   {
  4.     _id: 1,
  5.     product: "iPhone 15",
  6.     category: "电子产品",
  7.     price: 6999,
  8.     quantity: 2,
  9.     region: "华东",
  10.     date: ISODate("2023-10-05")
  11.   },
  12.   {
  13.     _id: 2,
  14.     product: "羽绒服",
  15.     category: "服装",
  16.     price: 899,
  17.     quantity: 5,
  18.     region: "华北",
  19.     date: ISODate("2023-10-12")
  20.   },
  21.   {
  22.     _id: 3,
  23.     product: "咖啡机",
  24.     category: "家电",
  25.     price: 1599,
  26.     quantity: 1,
  27.     region: "华南",
  28.     date: ISODate("2023-11-02")
  29.   },
  30.   {
  31.     _id: 4,
  32.     product: "蓝牙耳机",
  33.     category: "电子产品",
  34.     price: 399,
  35.     quantity: 10,
  36.     region: "华东",
  37.     date: ISODate("2023-11-15")
  38.   }
  39. ]);
复制代码
  1. //筛选日期为 2023年10月 的订单,按 category 分组,计算每个类别的 总销售额(price × quantity),按总销售额降序排序。
  2. db.sales.aggregate([
  3.   // 阶段1:筛选日期范围
  4.   { $match: {
  5.     date: {
  6.       $gte: ISODate("2023-10-01"),
  7.       $lt: ISODate("2023-11-01")
  8.     }
  9.   }},
  10.   // 阶段2:计算每个订单的销售额(price * quantity)
  11.   { $addFields: {
  12.     totalSale: { $multiply: ["$price", "$quantity"] }
  13.   }},
  14.   // 阶段3:按category分组统计总销售额
  15.   { $group: {
  16.     _id: "$category",
  17.     totalSales: { $sum: "$totalSale" },
  18.     avgSalePerOrder: { $avg: "$totalSale" },
  19.     orderCount: { $sum: 1 } // 统计订单数量
  20.   }},
  21.   // 阶段4:按totalSales降序排序
  22.   { $sort: { totalSales: -1 } }
  23. ]);
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

自由的羽毛

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表