概念与准备
# 概念
- 一个开源、高性能、无模式的文档型数据库
- NoSQL 数据库中的一种
- 最像关系型数据库的非关系型数据库
- 存储形式像 JSON 数组(BSON)
# 适用场景
- 数据量大
- 写入操作频繁(读写都很频繁)
- 价值较低的数据,对事务性要求不高
- 应用不需要事务及复杂的 join 事务
- 新应用,需求会变,数据模型无法确定,想快速迭代开发
- 应用需要 2000-3000 以上的读写 QPS(更高也可以)
- 应用需要 TB 甚至 PB 级别数据存储
- 应用发展迅速,需要能快速水平扩展
- 应用要求存储的数据不丢失
- 应用需要 99.999% 高可用
- 应用需要大量的地理位置查询、文本查询
相对于 MySQL,可以以更低的成本解决问题(学习、开发、运维等成本)
# 结构

| SQL | MongoDB | 说明 |
|---|---|---|
| database | database | 数据库 |
| table | collection | 数据库表 / 集合 |
| row | document | 数据记录行 / 文档 |
| column | field | 数据字段 / 域 |
| index | index | 索引 |
| table joins | 表连接,MongoDB 不支持 | |
| 嵌入文档 | MongoDB 通过嵌入式文档来替代多表连接 | |
| primary key | primary key | 主键,MongoDB 自动将 _id 字段设置为主键 |
# BSON 类型
常用类型
未提供示例的,可认为是和 JavaScript 对象是同写法。
| 数据类型 | 描述 | 示例 |
|---|---|---|
| 字符串 | ||
| 对象 id | 文档的唯一 ID(12Byte) | {"X" :ObjectId() } |
| 布尔值 | ||
| 数组 | ||
| 32 位整数 | ||
| 64 位整数 | ||
| 64 位浮点数 | ||
| null | ||
| undefined | ||
| 符号 | ||
| 正则表达式 | {"x" : /foobar/i} | |
| 代码 | JavaScript 代码 | {"x" : function() { /* …… */ }} |
| 二进制数据 | ||
| 最大值 / 最小值 |
# 版本号
参考:MongoDB 版本控制 - MongoDB 手册 (opens new window)
# 当前
MongoDB 版本控制采用 X.Y.Z 形式,其中的 X.Y 是指版本系列, Z 是指补丁号。
Note
5.0 之后, x.0 即为稳定版,如 8.0
# MongoDB 4.4 及更早版本
采用 X.Y.Z 形式;其中 X.Y 指代版本系列或开发系列,而 Z 则指补丁版本号。
- 如果
Y为偶数,则X.Y指的是版本系列;例如,4.2版本系列和4.4版本系列。发布系列 稳定 ,适合生产。 - 如果
Y是奇数,则X.Y表示开发系列;例如,4.3开发系列和4.5开发系列。开发系列仅用于测试环境,不用于生产环境。
# 安装
# Docker compose
mongo - Official Image | Docker Hub (opens new window)
# Use root/example as user/password credentials
version: '3.1'
services:
mongo:
image: mongo
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
volumes:
- /my/own/datadir:/data/db
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
ME_CONFIG_BASICAUTH: false
默认端口为 27017
# 连接
Note
建议直接使用如 DataGrip 等数据库工具操作
# Shell
mongo
# Compass
上次更新: 2024/10/26, 18:34:32