【MongoDB】CRUD 操作入门
·
🛠️ 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 整体流程 🔄
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(), set/set/set/inc/$push |
| 删除命令 | deleteOne(), deleteMany() |
| 安全提示 | 删除前务必确认范围,开启事务保护关键操作 |
结语 🎉
现在你应该已经掌握了 MongoDB 最常用的四种操作。下一节我们会深入讲解查询条件与投影,教你写出更精准的查询语句!
老曹寄语:CRUD 是数据库操作的基石,练熟了这些技能你就离高手不远啦!有问题尽管来找我哈~ 😄
更多推荐




所有评论(0)