MongoDB安装、基础操作和聚合实例详解

mongodb · 浏览次数 : 9

小编点评

### MongoDB 入门体验 #### 一、安装与启动 使用 [Homebrew](https://brew.sh/) 安装 MongoDB 社区版: ```sh brew tap mongodb/brew brew install mongodb-community ``` 启动 MongoDB 服务: ```sh brew services start mongodb/community ``` 停止 MongoDB 服务: ```sh brew services stop mongodb/community ``` #### 二、MongoDB Shell 打开 MongoDB 的交互式 Shell: ```sh mongosh ``` #### 三、基本操作 1. **创建数据库和集合** ```sh use mydb db.createCollection("myCollection") ``` 2. **插入文档** ```sh db.myCollection.insertOne({ name: "Alfred", age: 34 }) db.myCollection.insertMany([ { name: "Mcdull", age: 33 }, { name: "Sally", age: 4 } ]) ``` 3. **查询文档** ```sh db.myCollection.find() db.myCollection.find({ age: { $gt: 25 } }) ``` 4. **更新文档** ```sh db.myCollection.updateOne({ name: "Alfred" }, { $set: { age: 29 } }) db.myCollection.updateMany({ age: { $lt: 35 } }, { $set: { status: "Active" } }) ``` 5. **删除文档** ```sh db.myCollection.deleteOne({ name: "Sally" }) db.myCollection.deleteMany({ status: "Active" }) ``` #### 四、聚合操作 1. **计算每个客户的总销售额和订单数量** ```sh db.sales.aggregate([ { $group: { _id: "$customer", totalSales: { $sum: { $multiply: ["$quantity", "$unit_price"] } }, totalOrders: { $sum: 1 } }, { $sort: { totalSales: -1 } } ]) ``` 2. **查找每种产品的平均销售价格和销售数量** ```sh db.sales.aggregate([ { $group: { _id: "$product", avgPrice: { $avg: "$unit_price" }, totalQuantity: { $sum: "$quantity" } }, { $sort: { _id: 1 } } ]) ``` 3. **筛选特定日期范围内的销售订单并投影字段** ```sh db.sales.aggregate([ { $match: { order_date: { $gte: ISODate("2024-06-01"), $lte: ISODate("2024-06-30") } }, { $project: { order_id: 1, product: 1, quantity: 1, totalAmount: { $multiply: ["$quantity", "$unit_price"] } } ]) ``` 至此,我们已经完成了 MongoDB 的基础操作和聚合操作的体验。接下来,我们将深入研究 MongoDB 的其他特性和优势,以确定它是否适合您的需求。

正文

虽然MongoDB这些年很流行,但笔者之前没研究过,现在有需求研究这类NoSQL的数据库,是为了验证其是否可被替换。


MongoDB是很轻量的文档数据库,简单测试也懒得专门准备虚拟机环境了,直接在macOS上安装测试下其基础功能。

  • 1.使用 Homebrew 安装 MongoDB
  • 2.启动/停止 MongoDB 服务
  • 3.启动 MongoDB Shell
  • 4.体验 MongoDB 基本操作
  • 5.体验 MongoDB 聚合操作

1. 使用 Homebrew 安装 MongoDB

# 添加 MongoDB 存储库
brew tap mongodb/brew

# 安装 MongoDB 社区版
brew install mongodb-community

2. 启动/停止 MongoDB 服务

# 启动 MongoDB 服务
brew services start mongodb/brew/mongodb-community

# 停止 MongoDB 服务(这个当然要等我们体验测试完成后才停..)
brew services stop mongodb/brew/mongodb-community

3. 启动 MongoDB Shell

# 打开 MongoDB 的交互式 Shell
mongosh

在mongosh登录到MongoDB时可以看到,笔者这里安装的是7.0.12版本的MongoDB,使用默认端口27017:

jingyuzhao@jingyuzhao-mac ~ % mongosh
Current Mongosh Log ID:	668ce3d3012a1d349d3a46b3
Connecting to:		mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.2.10
Using MongoDB:		7.0.12
Using Mongosh:		2.2.10

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

------
   The server generated these startup warnings when booting
   2024-07-09T15:09:54.021+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
------

test> 

4. 体验MongoDB基本操作

下面进行一些基本的 MongoDB 操作示例:

1)创建数据库和集合:

-- 切换到要使用的数据库(如果不存在则会自动创建)
use mydb

-- 创建集合
db.createCollection("myCollection")

2)插入文档:

-- 插入单个文档:
db.myCollection.insertOne({ name: "Alfred", age: 34 })

-- 插入多个文档:
db.myCollection.insertMany([
  { name: "Mcdull", age: 33 },
  { name: "Sally", age: 4 }
])

3)查询文档:

-- 查询所有文档:
db.myCollection.find()

-- 查询满足条件的文档:
db.myCollection.find({ age: { $gt: 25 } })

4)更新文档:

-- 更新单个文档:
db.myCollection.updateOne({ name: "Alfred" }, { $set: { age: 29 } })

-- 更新多个文档:
db.myCollection.updateMany({ age: { $lt: 35 } }, { $set: { status: "Active" } })

5)删除文档:

-- 删除单个文档,name值为'Sally'的记录:
db.myCollection.deleteOne({ name: "Sally" })

-- 删除多个文档,status值为'Active'的记录:
db.myCollection.deleteMany({ status: "Active" })

5. 体验MongoDB聚合操作

1)创建测试用例

-- 删除 sales 集合
db.sales.drop()

-- 创建 sales 集合并插入示例文档
db.sales.insertMany([
  {
    "order_id": 1001,
    "product": "Laptop",
    "quantity": 2,
    "unit_price": 1200,
    "customer": "Alice",
    "order_date": ISODate("2024-06-07T08:30:00Z")
  },
  {
    "order_id": 1002,
    "product": "Monitor",
    "quantity": 1,
    "unit_price": 500,
    "customer": "Bob",
    "order_date": ISODate("2024-06-10T10:15:00Z")
  },
  {
    "order_id": 1003,
    "product": "Keyboard",
    "quantity": 3,
    "unit_price": 50,
    "customer": "Alice",
    "order_date": ISODate("2024-06-15T14:45:00Z")
  },
  {
    "order_id": 1004,
    "product": "Mouse",
    "quantity": 5,
    "unit_price": 20,
    "customer": "Charlie",
    "order_date": ISODate("2024-07-09T09:30:00Z")
  }
])

查询这个集合结果:
db.sales.find()

mydb> db.sales.find()
[
  {
    _id: ObjectId('668cf766749a72317b175646'),
    order_id: 1001,
    product: 'Laptop',
    quantity: 2,
    unit_price: 1200,
    customer: 'Alice',
    order_date: ISODate('2024-06-07T08:30:00.000Z')
  },
  {
    _id: ObjectId('668cf766749a72317b175647'),
    order_id: 1002,
    product: 'Monitor',
    quantity: 1,
    unit_price: 500,
    customer: 'Bob',
    order_date: ISODate('2024-06-10T10:15:00.000Z')
  },
  {
    _id: ObjectId('668cf766749a72317b175648'),
    order_id: 1003,
    product: 'Keyboard',
    quantity: 3,
    unit_price: 50,
    customer: 'Alice',
    order_date: ISODate('2024-06-15T14:45:00.000Z')
  },
  {
    _id: ObjectId('668cf766749a72317b175649'),
    order_id: 1004,
    product: 'Mouse',
    quantity: 5,
    unit_price: 20,
    customer: 'Charlie',
    order_date: ISODate('2024-07-09T09:30:00.000Z')
  }
]
mydb> 

2)执行聚合操作

示例 1: 计算每个客户的总销售额和订单数量

db.sales.aggregate([
  {
    $group: {
      _id: "$customer",
      totalSales: { $sum: { $multiply: ["$quantity", "$unit_price"] } },
      totalOrders: { $sum: 1 }
    }
  },
  { $sort: { totalSales: -1 } } // 按总销售额降序排序
])

查询结果:【计算每个客户的总销售额和订单数量】

[
  { _id: 'Alice', totalSales: 2550, totalOrders: 2 },
  { _id: 'Bob', totalSales: 500, totalOrders: 1 },
  { _id: 'Charlie', totalSales: 100, totalOrders: 1 }
]

示例 2: 查找每种产品的平均销售价格和销售数量

db.sales.aggregate([
  {
    $group: {
      _id: "$product",
      avgPrice: { $avg: "$unit_price" },
      totalQuantity: { $sum: "$quantity" }
    }
  },
  { $sort: { _id: 1 } } // 按产品名称升序排序
])

查询结果:【查找每种产品的平均销售价格和销售数量】

[
  { _id: 'Keyboard', avgPrice: 50, totalQuantity: 3 },
  { _id: 'Laptop', avgPrice: 1200, totalQuantity: 2 },
  { _id: 'Monitor', avgPrice: 500, totalQuantity: 1 },
  { _id: 'Mouse', avgPrice: 20, totalQuantity: 5 }
]

示例 3: 筛选特定日期范围内的销售订单并投影字段

db.sales.aggregate([
  {
    $match: {
      order_date: {
        $gte: ISODate("2024-06-01"),
        $lte: ISODate("2024-06-30")
      }
    }
  },
  {
    $project: {
      order_id: 1,
      product: 1,
      quantity: 1,
      totalAmount: { $multiply: ["$quantity", "$unit_price"] }
    }
  }
])

查询结果:【筛选特定日期范围内的销售订单并投影字段】

[
  {
    _id: ObjectId('668cf766749a72317b175646'),
    order_id: 1001,
    product: 'Laptop',
    quantity: 2,
    totalAmount: 2400
  },
  {
    _id: ObjectId('668cf766749a72317b175647'),
    order_id: 1002,
    product: 'Monitor',
    quantity: 1,
    totalAmount: 500
  },
  {
    _id: ObjectId('668cf766749a72317b175648'),
    order_id: 1003,
    product: 'Keyboard',
    quantity: 3,
    totalAmount: 150
  }
]

至此,我们学习了如何安装、启动和停止 MongoDB,并通过 MongoDB Shell 执行基础的 CRUD 操作(创建、查询、更新和删除文档),同时探索了 MongoDB 的聚合操作,用于实现复杂的数据分析。后续,会继续研究关于Oracle 23ai在JSON这方面的能力表现。

与MongoDB安装、基础操作和聚合实例详解相似的内容:

MongoDB安装、基础操作和聚合实例详解

虽然MongoDB这些年很流行,但笔者之前没研究过,现在有需求研究这类NoSQL的数据库,是为了验证其是否可被替换。 MongoDB是很轻量的文档数据库,简单测试也懒得专门准备虚拟机环境了,直接在macOS上安装测试下其基础功能。 1.使用 Homebrew 安装 MongoDB 2.启动/停止 M

MongoDB从入门到实战之Docker快速安装MongoDB

前言 在上一篇文章中带领带同学们快速入门MongoDB这个文档型的NoSQL数据库,让大家快速的了解了MongoDB的基本概念。这一章开始我们就开始实战篇教程,为了快速把MongoDB使用起来我将会把MongoDB在Docker容器中安装起来作为开发环境使用。然后我这边MongoDB的可视化工具用的

【小白新手教程】Ubuntu中安装MongoDB

本文由葡萄城技术团队于博客园原创并首发转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 分享给小白的操作教程 , 希望给有需要的人一点帮助。虽然是一个简单的问题,老手可能已经得心应手了,但是作为新手却要研究很久,这里按步骤给大家分享一下如何完成在Ubuntu

MongoDB从入门到实战之MongoDB工作常用操作命令

前言: 上一章节我们快速的在Docker容器中安装了MongoDB,并且通过Navicat MongoDB可视化管理工具快速的连接、创建数据库、集合以及添加了文档数据源。这一章节我们主要是了解一下在日常工作中MongoDB一些常用的操作命令。 MongoDB从入门到实战的相关教程 MongoDB从入

轻松掌握组件启动之MongoDB:快速入门、Linux安装和Docker配置指南

本文总结了MongoDB的快速入门、Linux安装和Docker配置指南。它提供了一步步的操作指引,帮助读者迅速上手MongoDB,并了解如何在Linux环境下进行安装、启动和配置。此外,文章还介绍了使用Docker安装和配置MongoDB的方法,使读者能够更轻松地部署和管理MongoDB实例。

[转帖]在 CentOS 7 上安装并配置 Python 3.6环境

https://www.jianshu.com/p/b978e46de442 拖了很久没有更新,抱歉啦~ 今天受邀写篇如何在 CentOS 7 上配置 Python 3 环境的文章。往常我都选择直接把我早年写的一篇文章《源码编译MongoDB》丢过去,让他们看其中的源码编译 Python 那一节,不

利用Docker、云服务器、mongodb搭建自己的测试平台

准备一个云服务器 购买一个云服务器,在阿里云,腾讯云上购买即可。 然后创建一个实例,安装Linux操作系统,我安装的是CentOS。 记住账号和密码,可以使用ssh远程登录即可。 搭建测试环境 Docker是一个轻量级的虚拟机,可以使用Docker下载一个Docker里面包含你想要的环境的镜像 比如

[转帖]Linux遇到一个内存过高的报警——释放buff/cache

前些天一直受到内存报警,过一段时间就会恢复。由于开发工作有些多,就一直没理它,但是最近几天开始有些频繁了。虽然不影响业务,但是天天报警,还是让人提心吊胆的。因此就抽了一个上午的时间去解决一下这个问题。 排查问题 这台机器安装的是mongodb,因为最近业务增加,内容使用增加是正常的,但是实际的占用内

MongoDB安全加固,防止数据库攻击删除勒索威胁

前言: 今天发现前段时间自己搭建的一个系统的MongoDB数据找不到了,觉得很奇妙,然后登上MongoDB数据库发现多了一个名为READ__ME_TO_RECOVER_YOUR_DATA的数据库,里面还有一个README的集合里面包含了下面描述的勒索信息。没错我的MongoDB数据库被攻击了,不过还

MongoDB从入门到实战之MongoDB简介

前言 相信很多同学对MongoDB这个非关系型数据库都应该挺熟悉的,在一些高性能、动态扩缩容、高可用、海量数据存储、数据价值较低、高扩展的业务场景下MongoDB可能是我们的首选,因为MongoDB通常能让我们以更低的成本解决问题(包括学习、开发、运维等成本)。接下来的一个月博主将会从基础出发,编写