认识 MongoDB
2025 速览:MongoDB 6.0/7.0 之后陆续上线多文档 ACID 事务、原生向量搜索(Atlas Vector Search)、列式索引(Columnstore Indexes)、时间序列集合、可查询加密(Queryable Encryption)等能力,已经从“文档数据库”演进为覆盖事务、分析、AI 检索的一体化数据平台。以下内容在保留原有结构的基础上补充最新要点与实践链接。
基本概念
什么是 MongoDB
一个以 JSON/BSON 为数据模型的文档数据库;文档来自于 "JSON Document",并非我们理解的 PDF、Word 文档。它可用于事务型(OLTP)业务、实时分析以及 AI 检索。
MongoDB 是免费的吗?
- MongoDB 有两个发布版本:社区版和企业版
- 社区版基于 SSPL(Server Side Public License)发布,可免费使用但对 SaaS 场景有附加要求
- 企业版提供商业支持、Advanced Security、在线热备等企业特性,需要付费
- Atlas(MongoDB 官方云)提供完全托管、Serverless、Vector Search、Atlas Search 等托管能力
主要特点
- 建模灵活,可在需要时使用 JSON Schema 校验
- 文档模型与对象模型天然契合,降低开发成本
- 原生复制集 + 分片提供高可用与水平扩展
- 内置多种索引(B-Tree、TTL、地理位置、全文、Columnstore、Vector)
- 自 4.0 起支持跨集合 ACID 事务、自 5.0 起提供 Snapshot Reads、可调隔离级别
- 支持 Time Series、Change Streams、Serverless 函数触发器,适合实时应用
MongoDB 与关系型数据库
MongoDB | RDBMS | |
---|---|---|
维度 | MongoDB | 传统 RDBMS |
--- | --- | --- |
数据模型 | 文档模型;可嵌套、可多形 | 关系模型;严格 schema |
事务能力 | 单文档原子;4.0+ 支持跨集合事务 | 完整 ACID |
查询语言 | MQL、聚合管道、Atlas Search | SQL |
高可用 | 复制集(Replica Set)自动选主 | 主从、MGR、AlwaysOn |
水平扩展 | 原生分片、Serverless | 一般需手动分库分表 |
索引类型 | B-Tree、Hash、TTL、地理、全文、Columnstore、Vector | B-Tree、Hash、部分全文 |
AI 集成 | Atlas Vector Search、Aggregation + 大模型、Change Stream 触发 | 需外部组件 |
部署形态 | 自建、Atlas 托管、Serverless、Edge(Realm) | 自建、RDS 托管 |
MongoDB 的优势及特点(含 2024-2025 更新)
- 面向开发者的易用 + 高效数据库
- 一目了然的对象模型
文档模型与数据库中的文档一一对应
- 灵活:快速响应业务变化
- 多形性:同一集合可以包含不同字段(类型)的文档对象
- 动态性:线上修改数据模式,修改时应用与数据库均无需下线
- 数据治理:支持使用 JSON Schema、Schema Rule、Queryable Encryption,保障灵活性的同时实现合规管理
- 快速:最简单快速的开发方式;JSON 模型之快速特性:
- WiredTiger 引擎配合集合层次的压缩节省 IO
- 反范式 + Embedded Documents 提升查询速度
- MongoDB Drivers、Realm Sync、GraphQL API 缩短交付周期
- 原生的高可用和横向扩展能力
- Replica Set:2~50 个成员,最多 7 个投票节点
- 自动选主、Retryable Writes、Majority Write Concern 保证一致性
- 多中心容灾能力 + Cluster-to-Cluster Sync(6.0+)
- 滚动升级与在线索引重建减少停机
- 横向扩展能力
- 需要的时候无缝扩展
- 应用对分片透明,可通过
hashed
/ranged
分片 - Serverless、Global Clusters 支持按区域路由
- Time Series + Columnstore 索引在海量数据中提供高压缩比和分析性能
安装与部署快速指南
- 官方下载:https://www.mongodb.com/try
- Atlas 云服务(推荐):点击
Create Deployment
可在几分钟内创建免费/Serverless 集群,内置向量搜索、Search、自动备份 - 包管理:macOS 可
brew install mongodb-community@7.0
;Ubuntu 使用官方 APT/YUM 源 - 容器:
docker run --name mongo -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo:7.0
- 配置建议:
- 默认使用
mongosh
作为 Shell(brew install mongosh
) - 开启访问控制(
security.authorization: enabled
)并使用 SCRAM-SHA-256 - 在生产环境启用
replication.replSetName
,配置wiredTiger.engineConfig.journalCompressor: zstd
- 默认使用
- 打开docker hub 官网搜 mongodb
使用 docker-compose 部署(示例)
version: '3.8'
services:
mongo:
image: mongo:7.0
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
ports:
- 27001:27017
command: ["--replSet", "rs0", "--setParameter", "enableTestCommands=1"]
volumes:
- /home/mongotest/data:/data/db
- /home/mongotest/keyfile:/data/configdb
healthcheck:
test: ["CMD", "mongosh", "--quiet", "--eval", "db.adminCommand('ping')"]
interval: 10s
timeout: 5s
retries: 6
# 如需启用副本集,将多个容器加入同一 docker network,再执行 rs.initiate()
yaml
以我的的服务为例,在 home 文件夹下创建一个 mongotest 文件,然后在里面创建一个 docker-compose.yml,然后将上面的内容复制到 docker-compose.yml 文件中(当然也可以使用 ftp 工具上传)
我这儿就用 vim 编辑 docker-compose.yml 文件
// 目录已经在/home/mongotest下
$ vim docker-compose.yml
shell
然后就将内容复制进去,按ESC
,然后在分别按:wq
回车
启动mongo服务
现在就可以使用docker-compose up -d
来启动 mongo 服务了,执行命令后 docker 就去拉去 mongo 镜像并创建 mongo 数据
查看运行进程
可以使用docker ps -a
或者docker-compose
查看现在已启动的 docker 镜像
配置开放端口
连接前一定要检查宿主机端口是否开放;CentOS/RHEL 使用 firewall-cmd --add-port=27017/tcp --permanent
,随后 firewall-cmd --reload
。云服务器还需在安全组/ACL 中开放端口。
如果在添加规则的时候出现如下报错的话,可有一下方案解决
- 检查服务器是否有安装
firewalld
,检查命令如下:
$ rpm -qa firwalld // 回车后如果没有打印出任何东西,则表明没有安装
shell
- 安装 firewalld 的命令:
$ yum install firewalld
shell
↑