
一、MongoDB 核心定义MongoDB 是一款文档型 NoSQL 数据库由 MongoDB Inc. 开发采用 C 编写摒弃了传统关系型数据库的表结构以BSON二进制 JSON格式存储数据兼容 JSON支持更多数据类型如日期、二进制、正则等核心特点是「灵活、可扩展、高性能」适合存储非结构化 / 半结构化数据二、核心概念对比关系型数据库新手最易混淆的是 MongoDB 与 MySQL 等关系型数据库的概念对应用表格清晰对比MongoDB 概念关系型数据库MySQL说明DatabaseDatabase数据库逻辑隔离的数据集CollectionTable集合无需预定义结构的 “表”DocumentRow文档一条记录JSON 格式FieldColumn字段文档中的键值对IndexIndex索引加速查询_idPrimary Key文档唯一标识自动生成可自定义核心差异MongoDB 的 Collection 无需提前定义字段schema 自由同集合的文档可以有不同字段比如一个文档有name/age另一个可以有name/email三、MongoDB 核心特性灵活的文档模型无需预定义表结构适配快速迭代的业务如电商、社交新增字段无需修改整个集合高性能支持内存映射存储热数据加载到内存查询速度快内置索引单字段、复合、地理空间、文本索引等优化查询效率高可扩展性水平扩展通过「分片Sharding」将数据分布到多台服务器解决大数据量存储副本集Replica Set实现数据备份、故障自动转移保证高可用丰富的查询能力支持类似 SQL 的查询语法还能实现聚合、地理空间查询、全文检索等事务支持4.0 版本支持多文档事务4.2 支持分布式事务弥补了早期 NoSQL 事务的短板四、MongoDB 基本操作实操篇以下是最常用的操作以 MongoDB Shell 为例也适配 Python/Java 等驱动先确保你已安装 MongoDB 并启动服务mongod命令然后进入 Shellmongo或mongosh数据库操作// 切换/创建数据库不存在则插入数据时自动创建use mydb// 查看当前数据库db// 查看所有数据库show dbs// 删除当前数据库db.dropDatabase()集合操作// 创建集合可选插入文档时自动创建db.createCollection(users)// 查看所有集合show collections// 删除集合db.users.drop()文档操作核心1.插入文档// 插入单条db.users.insertOne({name:张三,age:25,email:zhangsantest.com,hobbies:[篮球,游戏],createTime:newDate()})// 插入多条db.users.insertMany([{name:李四,age:30,email:lisitest.com},{name:王五,age:28,email:wangwutest.com,isVip:true}])2.查询文档// 查询所有建议加 limit避免数据量过大db.users.find()// 原始 BSON 格式db.users.find().pretty()// 格式化输出// 条件查询等于db.users.find({age:25}).pretty()// 条件查询大于 $gt、小于 $lt、包含 $in 等db.users.find({age:{$gt:28}}).pretty()// 年龄28db.users.find({hobbies:{$in:[篮球]}}).pretty()// 爱好包含篮球// 投影只返回指定字段_id 默认返回设为 0 不返回db.users.find({age:{$gt:25}},{name:1,age:1,_id:0}).pretty()// 排序1 升序-1 降序db.users.find().sort({age:-1}).pretty()// 分页skip 跳过limit 限制条数db.users.find().skip(0).limit(2).pretty()// 第1页每页2条// 统计数量db.users.countDocuments({age:{$gt:25}})3.更新文档// 更新单条$set 只修改指定字段否则覆盖整个文档db.users.updateOne({name:张三},// 条件{$set:{age:26,email:zhangsan_newtest.com}}// 修改内容)// 更新多条db.users.updateMany({age:{$lt:30}},{$inc:{age:1}}// 年龄1)// 替换文档慎用会覆盖除 _id 外的所有字段db.users.replaceOne({name:李四},{name:李四,age:31,phone:13800138000})4.删除文档// 删除单条db.users.deleteOne({name:王五})// 删除多条db.users.deleteMany({age:{$lt:30}})// 删除所有db.users.deleteMany({})索引操作优化查询// 创建单字段索引1 升序-1 降序db.users.createIndex({name:1})// 创建复合索引db.users.createIndex({name:1,age:-1})// 查看索引db.users.getIndexes()// 删除索引db.users.dropIndex(name_1)// 索引名从 getIndexes 查看五、MongoDB 典型应用场景大数据量 / 高并发场景如电商用户行为日志、社交平台动态MongoDB 高性能读写和水平扩展能力适配这类场景数据结构多变的场景如 IoT 设备数据不同设备字段不同、内容管理系统文章 / 视频属性差异大无需修改表结构即可适配地理空间查询场景如外卖配送、打车软件的 “附近的商家 / 司机”MongoDB 内置地理空间索引支持高效的位置查询快速迭代的互联网产品创业公司 / 敏捷开发团队无需提前设计完整 schema快速上线并随业务调整数据结构六、MongoDB 与关系型数据库选型建议选 MongoDB选 MySQL/Oracle数据结构不固定、非结构化 / 半结构化数据结构固定、强事务、强关联如金融、电商订单大数据量、高读写并发数据量适中、需复杂 JOIN 查询快速迭代、灵活扩展业务稳定、需严格的 ACID 事务总结MongoDB 是文档型 NoSQL 数据库以 BSON 存储数据核心优势是灵活、高性能、易扩展无需预定义 schema核心操作围绕「数据库 - 集合 - 文档」三层结构常用 API 包括insertOne/Many、find、updateOne/Many、deleteOne/Many选型时优先看数据结构是否固定、是否需要强事务 / 关联查询非结构化 / 高并发选 MongoDB结构化 / 强事务选关系型数据库