🛠️ MongoDB的CRUD 操作入门
引言 🎯
哈喽各位小伙伴,我是你们的老朋友老曹!今天我们终于要开始真正动手干活啦 —— 学习 MongoDB 最核心的操作:CRUD(Create, Read, Update, Delete)。
如果说前面两节课是在铺垫舞台,那这节课就是主角登场!我们将用最接地气的方式,带你玩转数据的增删改查。准备好了吗?Let’s roll!
学习目标 ✅
- 🧠 掌握插入文档的各种姿势
- 🔍 学会使用多种条件查询文档
- 💻 熟练运用更新操作修改已有数据
- 🗑️ 安全删除不需要的数据
- 🤔 为后续高级查询打下基础
1️⃣ Create(插入):把数据塞进去 📥
✅方法一:insertOne() —— 插入单个文档
db.products.insertOne({
name: "iPhone 15 Pro",
price: 9999,
category: "手机",
inStock: true
})
✅方法二:insertMany() —— 批量插入文档
db.products.insertMany([
{ name: "MacBook Air", price: 8999, category: "笔记本" },
{ name: "iPad Pro", price: 6999, category: "平板" },
{ name: "Apple Watch", price: 2999, category: "穿戴设备" }
])
自定义 _id:
db.users.insertOne({
_id: "user_001",
username: "老曹",
email: "laocao@example.com"
})
老曹提醒:批量插入时如果中途出错,默认会回滚整个操作。可通过设置 ordered: false 继续执行剩余任务。
2️⃣ Read(查询):找找我的宝贝在哪 🔎
基础查询语法:
// 查询所有文档
db.products.find()
// 查询特定条件的文档
db.products.find({ category: "手机" })
// 只返回第一个匹配项
db.products.findOne({ name: "iPhone 15 Pro" })
条件操作符实战:
✅等值查询($eq):
db.products.find({ price: { $eq: 9999 } })
✅范围查询($gt, $lt, $gte, $lte):
// 价格大于等于 5000 的产品
db.products.find({ price: { $gte: 5000 } })
// 价格在 3000~8000 之间的产品
db.products.find({ price: { $gte: 3000, $lte: 8000 } })
✅数组匹配($in, $nin):
// 类别是手机或平板的产品
db.products.find({ category: { $in: ["手机", "平板"] } })
// 排除穿戴设备
db.products.find({ category: { $nin: ["穿戴设备"] } })
✅投影(Projection):只拿我想要的部分
// 只显示名称和价格字段
db.products.find({}, { name: 1, price: 1, _id: 0 })
老曹小技巧:投影中默认包含 _id,如不想显示需显式设为 0。
3️⃣ Update(更新):修修补补又三年 🔧
更新单个文档(updateOne()):
// 将 iPhone 15 Pro 的库存状态改为 false
db.products.updateOne(
{ name: "iPhone 15 Pro" },
{ $set: { inStock: false } }
)
更新多个文档(updateMany()):
// 给所有电子产品涨价 10%
db.products.updateMany(
{ category: "电子" },
{ $mul: { price: 1.1 } }
)
常用更新操作符:
✅$set:设置字段值
{ $set: { name: "New Name", age: 25 } }
✅$unset:删除字段
{ $unset: { oldField: "" } }
✅$inc:增加数值
{ $inc: { score: 10 } }
✅$push:向数组添加元素
{ $push: { tags: "热销" } }
老曹吐槽:更新操作就像化妆术,轻轻一抹就能焕然一新~
4️⃣ Delete(删除):拜拜了您嘞 👋
✅删除单个文档(deleteOne()):
// 删除第一个名为 iPad Pro 的文档
db.products.deleteOne({ name: "iPad Pro" })
✅删除多个文档(deleteMany()):
// 删除所有库存不足的商品
db.products.deleteMany({ inStock: false })
✅清空整个集合:
db.products.deleteMany({})
⚠️ 危险警告:删除不可逆,请谨慎操作!
老曹建议:删除前先做一次查询确认目标范围,避免误删重要数据。
5️⃣ 流程图讲解:CRUD 整体流程 🔄
#mermaid-svg-9tr6JLfCZOY8ByQf{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-9tr6JLfCZOY8ByQf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-9tr6JLfCZOY8ByQf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-9tr6JLfCZOY8ByQf .error-icon{fill:#552222;}#mermaid-svg-9tr6JLfCZOY8ByQf .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9tr6JLfCZOY8ByQf .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-9tr6JLfCZOY8ByQf .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9tr6JLfCZOY8ByQf .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9tr6JLfCZOY8ByQf .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-9tr6JLfCZOY8ByQf .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9tr6JLfCZOY8ByQf .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9tr6JLfCZOY8ByQf .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9tr6JLfCZOY8ByQf .marker.cross{stroke:#333333;}#mermaid-svg-9tr6JLfCZOY8ByQf svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9tr6JLfCZOY8ByQf p{margin:0;}#mermaid-svg-9tr6JLfCZOY8ByQf .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-9tr6JLfCZOY8ByQf .cluster-label text{fill:#333;}#mermaid-svg-9tr6JLfCZOY8ByQf .cluster-label span{color:#333;}#mermaid-svg-9tr6JLfCZOY8ByQf .cluster-label span p{background-color:transparent;}#mermaid-svg-9tr6JLfCZOY8ByQf .label text,#mermaid-svg-9tr6JLfCZOY8ByQf span{fill:#333;color:#333;}#mermaid-svg-9tr6JLfCZOY8ByQf .node rect,#mermaid-svg-9tr6JLfCZOY8ByQf .node circle,#mermaid-svg-9tr6JLfCZOY8ByQf .node ellipse,#mermaid-svg-9tr6JLfCZOY8ByQf .node polygon,#mermaid-svg-9tr6JLfCZOY8ByQf .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-9tr6JLfCZOY8ByQf .rough-node .label text,#mermaid-svg-9tr6JLfCZOY8ByQf .node .label text,#mermaid-svg-9tr6JLfCZOY8ByQf .image-shape .label,#mermaid-svg-9tr6JLfCZOY8ByQf .icon-shape .label{text-anchor:middle;}#mermaid-svg-9tr6JLfCZOY8ByQf .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-9tr6JLfCZOY8ByQf .rough-node .label,#mermaid-svg-9tr6JLfCZOY8ByQf .node .label,#mermaid-svg-9tr6JLfCZOY8ByQf .image-shape .label,#mermaid-svg-9tr6JLfCZOY8ByQf .icon-shape .label{text-align:center;}#mermaid-svg-9tr6JLfCZOY8ByQf .node.clickable{cursor:pointer;}#mermaid-svg-9tr6JLfCZOY8ByQf .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-9tr6JLfCZOY8ByQf .arrowheadPath{fill:#333333;}#mermaid-svg-9tr6JLfCZOY8ByQf .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-9tr6JLfCZOY8ByQf .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-9tr6JLfCZOY8ByQf .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-9tr6JLfCZOY8ByQf .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-9tr6JLfCZOY8ByQf .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-9tr6JLfCZOY8ByQf .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-9tr6JLfCZOY8ByQf .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-9tr6JLfCZOY8ByQf .cluster text{fill:#333;}#mermaid-svg-9tr6JLfCZOY8ByQf .cluster span{color:#333;}#mermaid-svg-9tr6JLfCZOY8ByQf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-9tr6JLfCZOY8ByQf .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-9tr6JLfCZOY8ByQf rect.text{fill:none;stroke-width:0;}#mermaid-svg-9tr6JLfCZOY8ByQf .icon-shape,#mermaid-svg-9tr6JLfCZOY8ByQf .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-9tr6JLfCZOY8ByQf .icon-shape p,#mermaid-svg-9tr6JLfCZOY8ByQf .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-9tr6JLfCZOY8ByQf .icon-shape rect,#mermaid-svg-9tr6JLfCZOY8ByQf .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-9tr6JLfCZOY8ByQf .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-9tr6JLfCZOY8ByQf .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-9tr6JLfCZOY8ByQf :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
Create
Read
Update
Delete
客户端发起请求
判断操作类型
插入文档
查询文档
更新文档
删除文档
返回插入结果
返回查询结果
返回更新结果
返回删除结果
6️⃣ 10大面试题:你能答对几道?🧠
| 1 | insertOne() 和 insertMany() 的区别? | 前者插入一条,后者可批量插入 |
| 2 | 查询时如何跳过某些字段? | 使用投影 { field: 0 } |
| 3 | $set 和 $inc 分别用于什么场景? | set 设置任意值,inc 增减数值 |
| 4 | findOne() 和 find() 返回结果有何不同? | findOne 返回对象,find 返回游标 |
| 5 | 更新操作是否会自动创建新字段? | 会,除非设置了 strict validation |
| 6 | 如何限制查询返回的数量? | 使用 limit(n) 方法 |
| 7 | 删除操作是否支持事务? | 支持,在事务块内执行即可 |
| 8 | 什么情况下会导致更新失败? | 条件不匹配、违反唯一约束等 |
| 9 | 如何统计某个集合的文档总数? | db.collection.countDocuments() |
| 10 | 批量插入时遇到部分失败该如何处理? | 设置 ordered: false 参数 |
7️⃣ 总结表格:今日重点回顾 📝
| 插入方法 | insertOne(), insertMany() |
| 查询语法 | find(), findOne(), 条件操作符 |
| 更新操作 | updateOne(), updateMany(),
s e t / set/ set/inc/$push |
| 删除命令 | deleteOne(), deleteMany() |
| 安全提示 | 删除前务必确认范围,开启事务保护关键操作 |
结语 🎉
现在你应该已经掌握了 MongoDB 最常用的四种操作。下一节我们会深入讲解查询条件与投影,教你写出更精准的查询语句!
老曹寄语:CRUD 是数据库操作的基石,练熟了这些技能你就离高手不远啦!有问题尽管来找我哈~ 😄
网硕互联帮助中心



![[特殊字符] 纯前端M3U8视频处理工具:在线播放、录制与转换的一站式解决方案-网硕互联帮助中心](https://www.wsisp.com/helps/wp-content/uploads/2026/02/20260131225721-697e88d1ece9e-220x150.png)


评论前必须登录!
注册