目录
一、下载安装
1.1 官网下载mongoDB
1.1.1 mongoDB
1.1.2 MongoDB GUI
1.2 下载流程
二、基本使用
2.1 创建数据库和集合
2.2 插入
2.3 查询
2.4 修改
2.5 删除
三、case
3.1 销售case
3.1.1 实操
3.1.2 全部指令汇总
背景:
个人练习用
一、下载安装
1.1 官网下载mongoDB
1.1.1 mongoDB
Download MongoDB Community Server | MongoDB
1.点进去什么好像可以自动给你选好,下载安装包的同学可以参考Mac 最新安装MongoDB数据库步骤+ 可视化软件MongoDB Compass - 简书
2.我电脑装好了brew,所以选择的终端执行指令下载,建议大家多看看指令安装过程中的提示,很详细
1.1.2 MongoDB GUI
可视化软件 ---> MongoDB Compass下载,下载链接
MongoDB Compass Download (GUI) | MongoDB
1.2 下载流程
1.下载
2.提示的很清晰,去网站创建账,然后把终端验证码贴到网页里,帮助你创建Atlas databas
3.终端提示的指令进行连接。连接成功
1.下载 MongoDB Compass 待更新
点击
二、基本使用
2.1 创建数据库和集合
1.指令:
-- 切换到要使用的数据库(如果不存在则会自动创建)
use yanhan_db
-- 创建集合
db.createCollection("test")
2.实操:
2.2 插入
1.指令:
-- 插入单个文档:
db.yanhan_db.insertOne({name:"john", age: 21})
-- 插入多个文档:(要用中括号包起来)
db.yanhan_db.insertMany([{name:"miky", age: 18}, {name:"king", age: 19}])
2.实操:
插入一条
插入多条
2.3 查询
1.指令
-- 查询所有文档:
db.yanhan_db.find()
-- 查询满足条件的文档:gt是greater than
db.yanhan_db.find({age:{$gt:18}})
2.实操:
查询所有
条件查询:查询 yanhan_db
数据库中年龄大于 18 岁的文档,符合条件的两个文档的详细信息。
2.4 修改
1.指令:
-- 更新单个文档:
db.yanhan_db.updateOne({name:"miky"},{$set:{age:100}})
-- 更新多个文档:lt小于,$set 更新
db.yanhan_db.updateMany({ age: { $lt: 35 } }, { $set: { status: "Active" } })
2.实操:
更新一个文档,
更新了 yanhan_db
数据库中年龄小于 35 岁的所有文档,将它们的 status
字段设置为 "Active"
。
2.5 删除
1.指令:
-- 删除单个文档,name值为'Sally'的记录:
db.yanhan_db.deleteOne({ name: "miky" })
-- 删除多个文档,status值为'Active'的记录:
db.yanhan_db.deleteMany({ status: "Active" })
2.实操:
三、case
3.1 销售case
3.1.1 实操
1.创建
2.插入数据
3.查询全部
4.聚合指令,计算每个客户的总销售额和订单数量
指令解释:
$group
:
{ $group: { _id: "$customer", ... } }
:按照customer
进行分组。totalSales
字段:$multiply
计算每个订单的销售额,用"$quantity", "$unit_price"相乘,然后用$sum
把计算好的结果相加。totalOrders
字段:每当遇到一个订单就加一,使用{ $sum: 1 }
计算总订单数量。
$sort
:
{ $sort: { totalSales: -1 } }
:按照totalSales
字段进行降序排序,总销售额最高在前。-1降序,1升序
实操展示:
5.查找每种产品的平均销售价格和销售数量
指令解释:
$group
:
_id: "$product"
:按照product
字段的值进行分组,每个唯一的产品名称作为分组的依据。avgPrice: { $avg: "$unit_price" }
:计算每个产品的平均单价。totalQuantity: { $sum: "$quantity" }
:计算每个产品的总销售数量。
$sort
:
- 按照
_id
字段(产品名称)进行升序排序。
实操:
6.筛选特定日期范围内的销售订单并投影字段,从 sales
集合中选择指定日期范围内的订单数据,然后计算每个订单项的销售总额,并保留 order_id
、product
、quantity
和 totalAmount
这些字段。
指令解释:
$match
阶段:
- 使用
$match
阶段筛选order_date
字段在2024-06-01
到2024-06-30
之间的订单。
$project
阶段:
- 使用
$project
阶段重塑输出文档,保留order_id
、product
和quantity
字段,并计算新的字段totalAmount
。totalAmount:
计算销售总额,和上面的一个查询相同。其他:
- 使用字段投影,通过指定字段名和值
1
或0
控制输出文档中是否包含特定字段。- gte:表示 "greater than or equal",即大于或等于
- lte:表示 "less than or equal",即小于或等于
实操
7.删除表
db.sales.drop()
3.1.2 全部指令汇总
-- 创建 sales
use sale
-- 创建 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")}
])
-- 查询sales全部
db.sales.find()
-- 计算每个客户的总销售额和订单数量
db.sales.aggregate([{$group: {_id: "$customer", // 按客户分组totalSales: { $sum: { $multiply: ["$quantity", "$unit_price"] } }, // 计算总销售额,使用 $multiply 计算每个订单的销售额,然后用 $sum 计算每个客户的总销售额totalOrders: { $sum: 1 } // 计算总订单数量,每次遇到一个订单就加一}},{ $sort: { totalSales: -1 } } // 根据 totalSales 字段进行降序排序,显示总销售额最高的客户在前面
])
-- 查找每种产品的平均销售价格和销售数量
db.sales.aggregate([{$group: {_id: "$product",avgPrice: { $avg: "$unit_price" },totalQuantity: { $sum: "$quantity" }}},{ $sort: { _id: 1 } } // 按产品名称升序排序
])--筛选特定日期范围内的销售订单并投影字段
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"] }}}
])
-- 删除 sales 集合
db.sales.drop()
参考:MongoDB安装、基础操作和聚合实例介绍_MongoDB_脚本之家