云计算百科
云计算领域专业知识百科平台

【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 整体流程 🔄

#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 是数据库操作的基石,练熟了这些技能你就离高手不远啦!有问题尽管来找我哈~ 😄

赞(0)
未经允许不得转载:网硕互联帮助中心 » 【MongoDB】CRUD 操作入门
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!