概述
本技能资料围绕 MongoDB 的日常使用展开,内容以命令与代码示例为主,覆盖命令行工具 mongosh、数据库操作、聚合、索引、Schema 设计、Mongoose ODM、Atlas、性能、备份、副本集与变更流等主题。以下按用途分段整理。
mongosh 基础与 CRUD
资料给出连接本地与远程实例的方式,包括连接字符串与副本集认证参数。基础命令涵盖 show dbs、use、show collections、db.stats()、集合统计、列出集合名、删除数据库,以及创建固定集合(capped collection)等。 CRUD 部分包含插入(insertOne、insertMany,含 ordered: false 选项)、查询(find、findOne、投影、排序、分页、countDocuments、distinct)、更新(updateOne、updateMany、upsert、replaceOne)、删除(deleteOne、deleteMany、findOneAndDelete)。
查询与更新操作符
查询操作符分为比较与逻辑($eq、$gt、$lte、$in、$nin、$and、$or、$not)、元素与求值($exists、$type、$regex、$mod)、数组($all、$size、$elemMatch、按索引访问元素)。 更新操作符分为字段操作($set、$unset、$inc、$rename、$min、$max、$mul)与数组操作($push 含 $each/$sort/$slice、$addToSet、$pull、$pop)。
聚合管道
资料展示聚合管道示例,包含 $match、$group($sum、$avg、$max)、$sort、$limit、$project(含 $round)。$lookup 用于连接,包含本地字段/外部字段写法与 pipeline 形式的关联子查询;$unwind 用于展开数组。$facet 示例结合 $bucket、$sort/$limit、$count,实现一次遍历中的多组聚合。
索引与 Schema 设计
索引部分包含单字段、唯一索引、复合索引(强调顺序:等值、排序、范围)、多键索引(自动索引数组元素)、文本索引(每个集合一个)、TTL 索引、部分索引、通配符索引,以及列出与删除索引的命令。 Schema 设计给出嵌入与引用的取舍建议、反规范化(存储冗余字段以规避连接)、多态模式(同一集合以 type 字段区分不同结构,示例为 notifications 集合)。
Mongoose ODM(Node.js)
包含连接方式、Schema 定义(必填、唯一、小写、最小/最大值、枚举、默认值、嵌套、数组、时间字段)、虚拟属性、实例方法、静态方法、中间件(pre save 钩子)。查询示例包含 find 链式 sort/limit/lean、findById/select、findOneAndUpdate、deleteMany。populate 用于引用解析,含嵌套 populate。lean() 返回普通 JS 对象,资料说明其适用于只读查询、跳过 hydration、速度更快。事务示例展示使用 session 的 startTransaction、commitTransaction、abortTransaction,并说明事务需要副本集或分片集群;本地开发需以 --replSet rs0 启动并执行 rs.initiate()。
MongoDB Atlas
给出 Atlas 连接字符串(mongosh 与 mongoose.connect 两种写法),以及关键设置说明:Network Access 白名单(生产不建议 0.0.0.0/0)、Database Access 角色(readWrite、atlasAdmin)、备份(M10+ 集群提供持续备份与时间点恢复,快照可下载或恢复到新集群)。
性能、备份与副本集
性能部分包含 explain("executionStats") 的关键字段解读(totalDocsExamined 与 nReturned 比例、executionTimeMillis、winningPlan.stage 中 IXSCAN 与 COLLSCAN 的区别、indexBounds)、数据库 profiler(setProfilingLevel、查看 system.profile)、索引提示 hint。 备份与恢复使用 mongodump/mongorestore,含整库、指定集合、gzip 压缩归档、从压缩归档恢复、以及 --drop 选项。 副本集部分展示三个 mongod 实例的启动、rs.initiate 初始化、rs.status 与 rs.conf;读写行为包含读偏好(primary、primaryPreferred、secondary、secondaryPreferred、nearest)与写关注(w: majority、wtimeout)。 变更流示例包含 watch、按管道过滤、以 resumeAfter 断点续传,以及 Mongoose 的 watch;资料说明其需要副本集或分片集群,并可用 fullDocument: "updateLookup" 在更新事件中包含完整文档。
常见模式
包含基于游标的分页(比 skip/limit 更适合大数据集)、全文搜索(文本索引与 $meta textScore 排序,及 Atlas Search 的 $search 示例)、地理空间查询(GeoJSON Point、2dsphere 索引、$nearSphere 半径查询、$geoWithin 多边形查询)。
限制与说明
资料未提供该技能的安装步骤、收费方式、适用平台或具体版本要求,这些信息暂未提供。事务与变更流均需要副本集或分片集群,Atlas Search 为 Atlas 专有能力。使用前请结合自身环境的官方文档核对。