首页 > 数据库 >MongoDB安装、基础操作和聚合实例详解

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

时间:2024-07-09 21:52:35浏览次数:25  
标签:product 实例 MongoDB db order 详解 id quantity

虽然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这方面的能力表现。

标签:product,实例,MongoDB,db,order,详解,id,quantity
From: https://www.cnblogs.com/jyzhao/p/18292805/mongodb-an-zhuang-ji-chu-cao-zuo-he-ju-he-shi-li

相关文章

  • Nuxt框架中内置组件详解及使用指南(四)
    title:Nuxt框架中内置组件详解及使用指南(四)date:2024/7/9updated:2024/7/9author:cmdragonexcerpt:摘要:本文详细介绍了Nuxt3框架中的两个内置组件:和的使用方法与示例。用于捕获并处理客户端错误,提供了错误处理和自定义错误展示的功能;而是一个实验性组件,用于渲染无客......
  • 运维锅总详解设计模式
    本首先简介23种设计模式,然后用Go语言实现这23种设计模式进行举例分析。希望对您理解这些设计模式有所帮助!一、设计模式简介设计模式是软件设计中用于解决常见设计问题的一套最佳实践。它们不是代码片段,而是解决特定问题的通用方案。设计模式分为三大类:创建型模式、结构型......
  • 全能型CAE/CFD建模工具SimLab 详解Part1: Geomtry,轻松集成力学、电磁学、疲劳优化等功
    SimLab的建模功能SimLab集成了结构力学,流体力学,电磁学,疲劳和优化等功能,是全能型的CAE/ CFD建模工具。具有强大的几何、网格编辑功能,能够快速的清理复杂模型,减少手动修复的工作量,提高建模效率。具有CAD参数双向识别功能,可识别Inspire/Creo/Catia/NX设计参数......
  • OceanBase 配置项&系统变量实现及应用详解(2):系统变量的定义及使用场景
    在上一篇博客,配置项的定义及使用方法,详细阐述了配置项的概念及其基本应用方式,这些配置项能够调控集群或租户的行为方式。然而,在实际使用OceanBase的过程中,我们有时仅希望针对当前会话调整某些行为特性,且在关闭会话连接后,这些调整不会影响后续的使用。此时,我们就需要借助“系统......
  • Docker logs命令详解
    一、常用命令可以查看命令用法dockerlogs--help2.查看日志更多详情dockerlogs--detailsredis跟踪日志输出(–follow,-f)dockerlogs--followredisdockerlogs-fredis显示自时间戳以来的日志(–since)日期格式需要看下dockerlogs--help给出的样式d......
  • [转]MQ详解以及各种消息中间件说明
    转自:https://blog.csdn.net/forebe/article/details/117993082 消息中间件相关知识1、概述消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间......
  • QT入门看这一篇就够(详解含qt源码)
     目录一、Qt概述1.1什么是Qt1.2Qt的发展史1.3Qt的优势1.4Qt版本1.5成功案例二、创建Qt项目2.1使用向导创建2.2一个最简单的Qt应用程序2.2.1main函数中2.2.2类头文件2.3.pro文件2.4命名规范 2.5QtCreator常用快捷键三、Qt按钮小程序3.1按钮的创建......
  • HTTP 协议详解
    1.HTTP协议介绍基本介绍:HTTP(HyperTextTransferProtocol):全称超文本传输协议,是用于从万维网(WWW:WorldWideWeb)服务器传输超文本到本地浏览器的传送协议。HTTP是一种应用层协议,是基于TCP/IP通信协议来传递数据的,其中HTTP1.0、HTTP1.1、HTTP2.0均为TCP实现,HTTP3.......
  • 4.6 pipeline 生产配置实例
    pipeline配置java项目pipeline{agent{label'slave'}options{timestamps()disableConcurrentBuilds()buildDiscarder(logRotator(numToKeepStr:'20',daysToKee......
  • 详解 | 什么是GeoTrust
    GeoTrust是一家全球知名的数字证书颁发机构(CertificateAuthority,简称CA),专注于提供SSL/TLS证书和其他相关的网络安全产品。1、历史背景:GeoTrust成立于2001年,最初作为一个独立的公司运营。2006年,GeoTrust被VeriSign收购。后来,在2010年,VeriSign的SSL业务又被Symantec收购。而现......