微信登录

MongoDB数据库教程

2009年发布
300功能
版本7.0.11
使用费用:free、fee
版权Server Side Public License v1
开发语言:C++

环境配置

架构

  • x86
  • x64
  • arm64
  • ppc64le

支持系统

  • Windows
  • Linux
  • macOS
  • freebsd
  • solaris

包类型

  • zip
  • deb
  • rpm
  • exe
  • msi
  • tar.gz
  • docker

是否重启生效

软件特点

  • 文档型数据库
  • 非关系型数据库
  • 分布式存储
  • 支持索引
  • 高可用集群
  • JSON 格式存储
  • 横向扩展
  • 事务支持

详细信息

开发者:

MongoDB Inc.

安装大小:

800MB

运行速度:

20000QPS

依赖包:

libcurl4openssllibsasl2-2libsnappy1v5

Windows安装路径:

C:\Program Files\MongoDB

Mac安装路径:

/usr/local/mongodb

Linux安装路径:

/usr/local/bin/mongodb

Windows配置文件路径:

C:\Program Files\MongoDB\bin\mongod.cfg

Mac配置文件路径:

/usr/local/etc/mongod.conf

Linux配置文件路径:

/etc/mongod.conf

输入速度:

500MB/s

输出速度:

450MB/s

GUI 软件名:

MongoDB CompassStudio 3TNoSQLBoosterRobo 3T

功能列表:

文档 CRUD 操作 索引创建与管理 聚合管道查询 副本集部署 分片集群搭建 数据备份恢复 用户权限管理 地理空间查询 全文检索 事务处理

必会要点

1掌握 MongoDB 文档数据模型和 BSON 格式特性
2熟悉 CRUD 操作(增删改查)的语法与使用场景
3理解索引类型(单字段、复合、地理空间等)及创建
4掌握聚合管道(Aggregation Pipeline)的使用方法
5熟悉副本集部署与高可用配置
6了解分片集群架构及分片键的选择原则
7掌握 MongoDB 事务(ACID)的使用限制与场景
8熟悉数据备份(mongodump)与恢复(mongorestore)
9理解读偏好(Read Preference)与写关注(Write Concern)
10掌握用户权限管理与角色配置
11熟悉索引优化与查询性能调优技巧
12了解 MongoDB 数据验证(Validation)规则配置
13掌握 TTL 索引实现数据自动过期清理
14熟悉地理空间索引与地理信息查询操作
15理解 MongoDB 内存管理与存储引擎(WiredTiger)
16掌握 MongoDB 与主流编程语言的客户端连接使用
17熟悉全文检索索引的创建与文本查询
18了解 MongoDB 变更流(Change Streams)的应用
19掌握数据导入(mongoimport)与导出(mongoexport)
20理解 MongoDB 数据分片与副本集的故障排查方法

与其他语言对比

1. MongoDB 存储灵活性比 MySQL 高很多
2. MongoDB 事务支持比 MySQL 弱
3. MongoDB 分布式扩展比 PostgreSQL 更便捷
4. MongoDB 复杂查询比 PostgreSQL 能力差
5. MongoDB 文档存储比 Redis 容量更大
6. MongoDB 读写速度比 Redis 慢一个量级
7. MongoDB 部署难度比 SQLite 高
8. MongoDB 并发性能比 SQLite 强
9. MongoDB 易用性比 Oracle 更高
10. MongoDB 企业级功能比 Oracle 少
11. MongoDB 横向扩展比 Cassandra 更简单
12. MongoDB 海量数据处理比 Cassandra 弱
13. MongoDB 数据模型比 Elasticsearch 更通用
14. MongoDB 检索能力比 Elasticsearch 差
15. MongoDB 功能丰富度比 Memcached 高
16. MongoDB 内存占用比 Memcached 多

MongoDB简介

MongoDB是一款基于分布式文档存储的NoSQL数据库,采用灵活的JSON-like格式(BSON)管理数据,适用于现代应用开发中的大规模、高并发场景。


核心特性

文档模型与灵活性

MongoDB以“集合”(Collections)和“文档”(Documents)为核心,支持嵌套数据结构,避免了传统关系型数据库的复杂表关联。例如,通过db.xx.find()可快速查询数据,语法接近SQL(对比MySQL)。

高扩展性与高性能

支持水平扩展(分片集群)和垂直扩展,通过副本集(Replica Set)实现自动容灾。内建的全文搜索索引和地理空间索引优化了复杂查询性能。

应用场景

适用于物联网(海量数据)、实时分析(聚合管道)和高并发Web应用(场景详情)。


安装与配置

多平台支持

提供Windows、Linux和macOS的安装包(安装指南),核心组件包括mongod(服务端)和mongo(客户端)。

可视化工具

通过官方工具MongoDB Compass直观管理数据,并可通过修改配置文件(如mongod.conf)自定义运行参数。


核心功能

数据操作

  • 增删改查:支持save()插入、update()修改、drop()删除(命令详解)。
  • 用户管理:在admin库中配置权限和角色。

备份与监控


高可用与运维

集群架构

  • 主从模式Master-Slave)提供基础冗余。
  • 分片集群结合副本集实现海量数据分布式存储。

运维安全


总结

MongoDB凭借其灵活的数据模型、水平扩展能力和丰富的功能生态,成为现代应用开发的优选数据库。通过合理使用集群方案运维工具,可构建高效稳定的数据平台。

注:全文约500字,结构上通过H2划分核心模块,H3展开细节,并嵌入了用户提供的15个相关链接(如安装、命令、高可用等关键节点)。

MongoDB小知识栏目(50个)

1. MongoDB应用场景:适合高性能、高并发、大数据量及高扩展需求的场景,如实时分析、内容管理。应用场景
2. 版本号规则:版本号奇数为开发版,偶数为稳定版,生产环境建议选择偶数版本。版本号解析
3. Windows安装:通过官方MSI安装包或解压ZIP文件部署MongoDB服务。安装指南
4. Linux安装:使用apt或yum包管理器安装,注意配置存储路径和权限。Linux安装
5. Mac安装:推荐使用Homebrew安装,一键配置环境变量和服务。MacOS安装
6. 核心执行文件mongo(客户端)、mongod(服务端)、mongos(分片集群路由)。文件说明
7. 可视化工具:官方推荐MongoDB Compass,支持图形化查询和数据管理。Compass使用
8. 配置文件mongod.conf(Linux/Mac)或mongod.cfg(Windows)定义端口、存储路径等。配置详解
9. 连接数据库:使用mongo --host <IP> --port <端口>命令或URI字符串连接。连接方法
10. 用户管理:在admin库创建用户并分配角色,确保权限隔离。用户管理

11. 数据备份与恢复mongodump导出数据,mongorestore导入备份文件。备份恢复
12. 实时监控工具mongostat查看操作统计,mongotop分析集合读写耗时。监控命令
13. 系统库作用admin(管理)、config(分片配置)、local(副本集元数据)。系统库解析
14. 切换数据库use <数据库名>切换上下文,数据库不存在时自动创建。库操作命令
15. 集合创建db.createCollection("name")显式创建,或插入数据时隐式生成。集合操作
16. 查询对比SQLdb.users.find({age: 25})等效于SELECT * FROM users WHERE age=25查询语法
17. 聚合管道$match过滤、$group分组、$sort排序实现复杂分析。聚合详解
18. 插入文档db.collection.save({...})insertOne()插入数据,支持批量操作。插入命令
19. 更新文档update()使用$set修改字段,$inc增减数值。更新操作
20. 删除集合db.collection.drop()删除集合,db.dropDatabase()删除整个库。删除操作

21. 数据类型转换:使用$convert$toInt在聚合中转换字段类型。类型转换
22. 文档关联方式:通过嵌入文档或_id引用关联数据,类似关系型外键。文档关系
23. 索引优化查询createIndex({field:1})创建单字段索引,提升查询速度。索引基础
24. 全文索引db.articles.createIndex({content:"text"})支持全文搜索。全文搜索
25. 副本集架构:包含Primary(主节点)、Secondary(从节点)、Arbiter(仲裁节点)。副本集详解
26. 主从模式:已逐渐被副本集替代,仅支持单向同步。主从模式
27. 分片集群:通过分片键将数据分布到多个节点,支持横向扩展。分片集群
28. 集群安全:使用keyfile文件实现节点间认证,防止未授权访问。安全配置
29. 系统信息查询db.hostInfo()查看服务器OS、内存、CPU等底层信息。运维命令
30. 连接数管理db.serverStatus().connections监控当前连接数和上限。连接管理

31. 锁分析工具db.currentOp()查看正在执行的操作及锁状态。锁分析
32. 全局锁监控db.serverStatus().globalLock显示写锁占用时间和队列。全局锁
33. 内存使用情况db.serverStatus().mem分析MongoDB内存分配及使用率。内存分析
34. WiredTiger缓存:通过db.serverStatus().wiredTiger监控存储引擎缓存效率。引擎缓存
35. 复制延迟检测db.printSlaveReplicationInfo()查看副本集节点同步延迟。复制延迟
36. 数据模型设计:根据读写频率选择嵌入或引用文档,平衡查询性能与数据冗余。
37. 地理空间查询:使用2dsphere索引支持附近地点搜索或区域包含查询。
38. 事务支持:MongoDB 4.0+支持多文档ACID事务,适用于复杂业务逻辑。
39. TTL索引expireAfterSeconds自动删除过期数据(如日志、会话信息)。
40. 正则表达式查询db.users.find({name: /^zhang/i})实现模糊匹配。

41. 性能优化技巧:限制返回字段(projection)、避免全集合扫描、使用覆盖索引。42. 批量写入操作bulkWrite()支持insertManyupdateMany等批量操作。43. 执行计划分析explain("executionStats")查看查询执行细节,优化慢查询。44. 聚合管道优化:尽早使用$match$project减少数据处理量。45. GridFS存储大文件:将大文件分块存储在fs.chunksfs.files集合中。46. Change Streams监听数据变更:实现实时数据同步或触发业务逻辑。47. 数据库验证规则schema validation限制文档结构,确保数据完整性。48. 副本集选举机制:节点优先级、心跳检测触发自动故障转移。49. 分片键选择策略:选择高基数、频率均匀的字段,避免数据倾斜。50. MongoDB Atlas云服务:全托管数据库服务,自动备份、监控和扩缩容。

:本文中部分知识点关联了用户提供的链接内容,更多细节可点击对应链接查看。

  1. ## 安装与配置
  2. ### 安装方式
  3. MongoDB支持多种操作系统安装([Windows](https://bookchips.com/chip/6850eb140b9569655f12073b)、[Linux](https://bookchips.com/chip/6850eb140b9569655f12073c)、[Mac OS](https://bookchips.com/chip/6850eb140b9569655f12073d)),安装后包含核心组件`mongo.exe`(客户端)、`mongod.exe`(服务端)和`mongos.exe`(分片路由)。详细安装内容可参考[安装内容说明](https://bookchips.com/chip/6850eb140b9569655f120741)。
  4. ### 配置文件与工具
  5. 配置通过`mongod.conf``mongod.cfg`实现,支持日志、端口等参数设置。可视化操作可使用官方工具[MongoDB Compass](https://bookchips.com/chip/6850eb140b9569655f12073e)。
  6. ---
  7. ## 基本操作
  8. ### 连接与用户管理
  9. 连接数据库使用`mongo --host IP --port 端口`命令。用户权限需在[admin库](https://bookchips.com/chip/6850eb140b9569655f12074e)中创建,语法示例:
  10. ```javascript
  11. use admin
  12. db.createUser({user: "root", pwd: "pwd", roles: ["root"]})

数据操作(CRUD)

  • 查询db.collection.find({条件}),可结合聚合管道实现复杂分析。
  • 新增db.collection.save({文档})支持插入或覆盖数据。
  • 更新db.collection.update({条件}, {$set: {字段: 值}}),需注意多文档更新参数。
  • 删除db.collection.drop()删除集合或文档。

高级功能

文档关系与索引

文档间通过_id或自定义字段关联,支持嵌套数组形式(文档关系)。索引优化查询速度,全文索引支持文本搜索。

高可用部署

  • 副本集(Replica Set)P-S-A架构保障数据冗余与故障转移。
  • 分片集群(Sharding):通过水平扩展提升性能(分片集群配置)。
  • 安全加固:集群间通信可配置keyfile认证

运维与监控

备份与恢复

使用mongodumpmongorestore实现数据备份与恢复(操作指南)。

性能监控

  • 实时监控mongostat查看操作统计,mongotop分析集合读写耗时(监控工具)。
  • 锁与内存:通过locksglobalLockmem命令诊断性能瓶颈(内存分析)。

扩展阅读

更多MongoDB应用场景与版本管理规则,可访问置顶帖或查阅运维命令全集

  1. ```markdown
  2. ## 安装与配置
  3. ### 多平台安装指南
  4. MongoDB支持在[Windows](https://bookchips.com/chip/6850eb140b9569655f12073b)、[Linux](https://bookchips.com/chip/6850eb140b9569655f12073c)和[Mac OS](https://bookchips.com/chip/6850eb140b9569655f12073d)系统安装。安装后会包含核心组件:
  5. - mongo.exe:客户端交互工具
  6. - mongod.exe:数据库服务进程
  7. - mongos.exe:分片集群路由服务
  8. ### 配置文件管理
  9. 通过修改`mongod.conf`或`mongod.cfg`配置文件可设置端口、数据存储路径等参数。Windows系统推荐使用服务方式运行:
  10. ```yaml
  11. systemLog:
  12. destination: file
  13. path: C:\\data\\log\\mongod.log
  14. storage:
  15. dbPath: C:\\data\\db

基本操作示例

CRUD操作

  1. // 插入文档(类比SQL INSERT)
  2. db.users.save({
  3. name: "李华",
  4. age: 28,
  5. tags: ["工程师", "篮球"]
  6. })
  7. // 条件查询(类比SQL WHERE)
  8. db.users.find({ age: { $gt: 25 } }, { name: 1 })
  9. // 更新文档
  10. db.users.update(
  11. { name: "李华" },
  12. { $set: { position: "高级工程师" } }
  13. )
  14. // 删除集合(需要管理员权限)
  15. db.users.drop()

高级查询功能

使用聚合管道进行复杂数据分析:

  1. db.orders.aggregate([
  2. { $match: { status: "completed" } },
  3. { $group: {
  4. _id: "$product",
  5. total: { $sum: "$amount" }
  6. }}
  7. ])

运维管理

备份与恢复

使用mongodump进行数据备份:

  1. mongodump --uri="mongodb://user:password@localhost:27017"

恢复数据时使用mongorestore命令载入bson文件。

性能监控

通过mongostat实时查看操作统计:

  1. mongostat --host 127.0.0.1:27017 -u admin -p password

使用printSlaveReplicationInfo检查副本集同步延迟。

高可用架构

副本集配置

建立Replica Set实现数据冗余:

  1. rs.initiate({
  2. _id: "rs0",
  3. members: [
  4. { _id: 0, host: "mongo1:27017" },
  5. { _id: 1, host: "mongo2:27017" },
  6. { _id: 2, host: "mongo3:27017", arbiterOnly: true }
  7. ]
  8. })

安全加固

通过添加keyfile实现集群认证:

  1. openssl rand -base64 756 > /data/keyfile
  2. chmod 400 /data/keyfile

更多运维技巧可参考:连接管理锁分析等文档

🚀 MongoDB 面试核心问题解析

🔍 基础概念

1. MongoDB与关系型数据库的区别?

MongoDB是文档型数据库,数据以BSON格式存储,支持动态 Schema;而关系型数据库采用固定表结构,强调ACID特性。MongoDB更适合非结构化数据场景。

2. 什么是BSON?

BSON(Binary JSON)是MongoDB的存储格式,在JSON基础上扩展了日期、二进制等数据类型,支持更高效的查询和索引。

🧩 数据模型设计

1. 何时使用嵌入文档 vs 引用?

嵌入文档适合频繁共同访问的子数据(如评论与博客),引用更适合多对多关系或独立更新频率高的场景。

2. 分片键的选择原则?

选择基数高、分布均匀、查询频率高的字段(如用户ID),避免使用单调递增的值(如时间戳),防止热点问题。

⚡ 性能优化

1. 如何优化慢查询?

使用explain()分析执行计划,创建匹配查询模式的复合索引,避免全集合扫描。注意索引排序方向需与查询一致。

2. 聚合管道的优化技巧?

通过$match$project阶段尽早过滤数据,使用$lookup替代多次查询,利用allowDiskUse处理大数据聚合。

🌐 高可用与扩展

1. 副本集的工作原理?

包含1个Primary节点和多个Secondary节点,通过心跳检测实现自动故障转移(默认10秒超时)。数据写入Primary后异步复制到Secondary。

2. 分片集群如何平衡数据?

MongoDB的Balancer后台进程持续监控分片间的数据块分布,当最大-最小分片的数据块差异超过阈值时触发自动迁移。


💡 提示:准备面试时需重点理解索引机制事务处理(ACID特性)和副本集选举流程,结合实际场景回答更具竞争力!