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安装、基础操作和聚合实例详解的更多相关文章
- C#操作SQLite方法实例详解
用 C# 访问 SQLite 入门(1) CC++C#SQLiteFirefox 用 C# 访问 SQLite 入门 (1) SQLite 在 VS C# 环境下的开发,网上已经有很多教程.我也是从 ...
- MongoDB安装+基础操作
MongoDB 一. 安装 这里展示使用docker安装mongoDB 拉取最新MongoDB镜像 docker pull mongo 运行容器 docker run -itd --name mong ...
- linux基础-磁盘阵列(RAID)实例详解
磁盘阵列(RAID)实例详解 raid技术分类 软raid技术 硬raid技术 Raid和lvm的区别 为什么选择用raid RAID详解 RAID-0 RAID-1 RAID-5 Raid-10 R ...
- java 流操作对文件的分割和合并的实例详解_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 java 流操作对文件的分割和合并的实例详解 学习文件的输入输出流,自己做一个小的示例,对文件进行分割和合并. 下面是代 ...
- Python编程之列表操作实例详解【创建、使用、更新、删除】
Python编程之列表操作实例详解[创建.使用.更新.删除] 这篇文章主要介绍了Python编程之列表操作,结合实例形式分析了Python列表的创建.使用.更新.删除等实现方法与相关操作技巧,需要的朋 ...
- Cocos2d-x 3.X手游开发实例详解
Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰 ...
- 转载 《AngularJS》5个实例详解Directive(指令)机制
<AngularJS>5个实例详解Directive(指令)机制 大漠穷秋 本文整理并扩展了<AngularJS>这本书第六章里面的内容,此书近期即将由电子工业出版社出版,敬请 ...
- 【python3+request】python3+requests接口自动化测试框架实例详解教程
转自:https://my.oschina.net/u/3041656/blog/820023 [python3+request]python3+requests接口自动化测试框架实例详解教程 前段时 ...
- python+requests接口自动化测试框架实例详解
python+requests接口自动化测试框架实例详解 转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实 ...
- Tomcat系列之服务器的安装与配置以及各组件详解
Tomcat系列之服务器的安装与配置以及各组件详解 大纲 一.前言 二.安装与配置Tomcat 三.Tomcat 目录的结构 四.Tomcat 配置文件 注,本文的测试的操作系统为CentOS 6.4 ...
随机推荐
- Idefics2 简介: 为社区而生的强大 8B 视觉语言模型
我们很高兴在此发布 Idefics2,这是一个通用的多模态模型,接受任意文本序列和图像序列作为输入,并据此生成文本.它可用于回答图像相关的问题.描述视觉内容.基于多幅图像创作故事.从文档中提取信息以及 ...
- python连接redis,mongodb以及简单命令使用
redis 环境如下: [root@mcw01 ~/msRedis]$ ps -ef|grep -v grep|grep redis root 46061 1 0 14:28 ? 00:00:45 r ...
- QShop商城--项目介绍
QShop商城-项目介绍 QShop商城,是全新推出的一款轻量级.高性能.前后端分离的电商系统,支持微信小程序,前后端源码100%开源,完美支持二次开发,让您快速搭建个性化独立商城. 技术架构:.Ne ...
- sentinel-dashboard.jar 安装
本文涉及的基本概念: 几种服务限流方式:熔断:拒绝流量访问,当系统恢复正常时在关闭熔断服务降级:将次要服务降级,停止服务,将系统资源释放出来给核心功能延迟处理:在前端设置一个流程缓冲池,将所有的流程全 ...
- 流式响应Web小工具实践
作为一位拥有多年经验的老程序员,我对于提升Web应用性能和用户体验有些兴趣.今天,我要和大家聊聊一个非常实用的技术--流式响应(Streaming Response). 首先,流式响应到底是什么呢?简 ...
- 轻松绕过 Graphql 接口爬取有米有数的商品数据
轻松绕过 Graphql 接口爬取有米有数的商品数据 有米有数数据的 API 接口,使用的是一种 API 查询语言 graphql.所有的 API 只有一个入口,具体的操作隐藏在请求数据体里面传输. ...
- 如何判断7z压缩文件格式
如果压缩文件的后缀不是7z,那么如何如何判断文件格式呢?那就是通过文件头判断. 7z文件头前6位,固定是:377ABCAF271C,其中前两位37.7A分别是"7""z& ...
- 【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)
在前一篇文章中,我们是把.NET 8应用读取SSL证书(X509)示例部署在App Service Windows环境中,那么如果部署在Linux环境,以及Linux Container中呢? 根据前 ...
- Java中编译异常与运行异常的区别
编译期异常和运行期异常的区别 编译期异常和运行期异常的区别如下 异常处理要求不同:编译期异常(也称为检测异常checked Exception)要求在代码中显式地处理(使用try-catch或者thr ...
- css作用 文本属性 颜色属性
Css作用:美化页面 各种css属性 接触的 css属性 width: height: background: Color 选择符和声明 声明包括 属性:属性值 选择符:{ 属性:属性值 } 1:文本 ...