概念与准备
# 概念
- 一个开源、高性能、无模式的文档型数据库
- 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