MongoDB 文档的增删改查实战

简介: 本文以“文章评论”为例,介绍MongoDB文档的增删改查操作。涵盖单条与批量插入、条件查询、投影筛选、局部更新与原子增减,以及安全删除等核心操作,助你掌握高效数据管理技巧。

在 MongoDB 中,所有业务数据都以“文档”(Document)形式存储在集合中。文档结构类似 JSON,支持嵌套、数组和多种数据类型。本文以“文章评论”场景为例,详解文档的插入、查询、更新与删除操作。

一、插入文档

1. 单条插入

使用 insert()insertOne() 插入单个文档:

db.comment.insert({
  "articleid": "100000",
  "content": "今天天气真好,阳光明媚",
  "userid": "1001",
  "nickname": "Rose",
  "createdatetime": new Date(),
  "likenum": NumberInt(10),
  "state": null
})

关键提示

  • comment 集合不存在,MongoDB 会自动创建;
  • 数字默认为 double 类型,整型必须使用 NumberInt(值)
  • 未指定 _id 时,系统自动生成唯一 ObjectId
  • 字段值可为 null,也可直接省略该字段。
2. 批量插入

使用 insertMany() 一次插入多条文档:

db.comment.insertMany([
  {
    "_id": "1",
    "articleid": "100001",
    "userid": "1002",
    "nickname": "相忘于江湖",
    "likenum": NumberInt(1000),
    "state": "1"
  },
  {
    "_id": "2",
    "articleid": "100001",
    "userid": "1005",
    "nickname": "伊人憔悴",
    "likenum": NumberInt(888),
    "state": "1"
  }
])

注意

  • 可手动指定 _id,但必须保证唯一;
  • 默认按顺序插入,若某条失败,后续文档将不再插入(已成功数据不回滚);
  • 生产环境中建议用 try...catch 捕获异常。

二、查询文档

1. 查询全部文档
db.comment.find()
// 或
db.comment.find({})
2. 条件查询
// 查询 userid 为 "1003" 的所有评论
db.comment.find({userid: "1003"})
3. 查询单条记录
// 返回符合条件的第一条
db.comment.findOne({userid: "1003"})
4. 投影查询(只返回指定字段)
// 只显示 userid 和 nickname(_id 默认包含)
db.comment.find({userid: "1003"}, {userid: 1, nickname: 1})
// 不显示 _id
db.comment.find({userid: "1003"}, {userid: 1, nickname: 1, _id: 0})

三、更新文档

1. 覆盖更新(慎用!)
db.comment.update({_id: "1"}, {likenum: NumberInt(1001)})

⚠️ 此操作会替换整个文档,仅保留 likenum 字段,其他字段全部丢失!

2. 局部更新(推荐)

使用 $set 修改指定字段,保留其余内容:

db.comment.update({_id: "2"}, {$set: {likenum: NumberInt(889)}})
3. 批量更新

默认只更新第一条匹配文档,需加 {multi: true} 更新全部:

// 仅更新第一条
db.comment.update({userid: "1003"}, {$set: {nickname: "凯撒"}})
// 更新所有匹配项
db.comment.update(
  {userid: "1003"},
  {$set: {nickname: "凯撒大帝"}},
  {multi: true}
)
4. 数值递增/递减

使用 $inc 对数值字段进行原子增减:

// 点赞数 +1
db.comment.update({_id: "3"}, {$inc: {likenum: NumberInt(1)}})

四、删除文档

1. 删除指定文档
db.comment.remove({_id: "1"})
2. 删除所有文档(极其危险!)
db.comment.remove({})

💡 提示:remove() 在新版本中已逐步被 deleteOne()deleteMany() 替代,但旧语法仍广泛兼容。


掌握这些 CRUD 操作,就能高效地管理 MongoDB 中的业务数据,为构建动态应用打下坚实基础。


相关文章
|
1天前
|
Java 数据库连接 数据库
OAuth2.0实战案例3
本节介绍如何创建OAuth2授权模块,包括项目搭建、依赖导入、配置文件编写及核心类配置,实现基于Spring Security与OAuth2的认证授权功能,支持数据库存储客户端与令牌信息。
客户端模式
该模式已超出OAuth2范畴,A服务以自身身份向B服务申请Token,无需用户参与。适用于A服务独立使用B服务资源的场景,完全为服务间内部交互,与用户权限无关。
|
存储 Java
ArrayList自动扩容(详细篇)
ArrayList自动扩容(详细篇)
801 1
|
1月前
|
存储 人工智能 自然语言处理
构建AI智能体:二十三、RAG超越语义搜索:如何用Rerank模型实现检索精度的大幅提升
本文介绍了重排序(Rerank)技术在检索增强生成(RAG)系统中的应用。Rerank作为初始检索和最终生成之间的关键环节,通过交叉编码器对初步检索结果进行精细化排序,筛选出最相关的少量文档提供给大语言模型。相比Embedding模型,Rerank能更精准理解查询-文档的语义关系,显著提高答案质量,降低Token消耗。文章详细比较了BGE-Rerank和CohereRerank等主流模型,并通过代码示例展示了Rerank在解决歧义查询(如区分苹果公司和水果)上的优势。
572 5
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
构建AI智能体:十二、给词语绘制地图:Embedding如何构建机器的认知空间
Embedding是一种将词语、图像等信息转化为低维稠密向量的技术,使计算机能捕捉语义关系。不同于传统One-Hot编码,Embedding通过空间距离表达语义相似性,如“国王-男人+女人≈王后”,广泛应用于NLP、推荐系统与大模型中,是AI理解世界的基石。
551 13
|
3月前
|
存储 SQL 运维
速看!数据库与数据仓库的本质区别是什么?
本文深入解析了“数据库”与“数据仓库”的核心区别,涵盖设计目的、数据结构、使用场景、性能优化和数据更新五个维度。数据库主要用于支持实时业务操作,强调事务处理效率;数据仓库则面向企业分析决策,注重海量数据的整合与查询性能。二者在企业中各司其职,缺一不可。
|
5月前
|
存储 数据采集 NoSQL
什么是数据仓库?数据库与数据仓库有什么关系?
数据仓库与数据库有何区别?数据仓库主要用于存储历史数据,支持企业分析决策;而数据库则负责管理实时业务数据,保障日常运作。两者在数据来源、处理方式、存储结构等方面差异显著,但又相辅相成,共同助力企业高效管理数据、提升运营与决策能力。
|
JavaScript 应用服务中间件 nginx
nginx配置解决vue刷新404、swagger 页面访问(springboot+vue项目)
nginx配置解决vue刷新404、swagger 页面访问(springboot+vue项目)
684 0
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
2236 15
|
消息中间件 Java Kafka
Kafka ACK机制详解!
本文深入剖析了Kafka的ACK机制,涵盖其原理、源码分析及应用场景,并探讨了acks=0、acks=1和acks=all三种级别的优缺点。文中还介绍了ISR(同步副本)的工作原理及其维护机制,帮助读者理解如何在性能与可靠性之间找到最佳平衡。适合希望深入了解Kafka消息传递机制的开发者阅读。
1479 0