目录
[一、什么是 MongoDB](#一、什么是 MongoDB)
[二、Ubuntu Linux 安装 MongoDB‑7.0](#二、Ubuntu Linux 安装 MongoDB‑7.0)
[三、MongoDB 常用指令(mongosh 内部执行)](#三、MongoDB 常用指令(mongosh 内部执行))
[1. 数据库操作](#1. 数据库操作)
[2. 集合操作](#2. 集合操作)
[3. 文档 - 插入数据 insert](#3. 文档 - 插入数据 insert)
[4. 查询 find 查询文档](#4. 查询 find 查询文档)
[5. 修改 update 更新文档](#5. 修改 update 更新文档)
[6. 删除 remove 删除文档](#6. 删除 remove 删除文档)
[7. 统计、排序、分页](#7. 统计、排序、分页)
[五、MongoDB 小坑总结](#五、MongoDB 小坑总结)
[六、Python 简单对接 MongoDB(拓展)](#六、Python 简单对接 MongoDB(拓展))
一、什么是 MongoDB
MongoDB 是一款非关系型数据库 (NoSQL) ,数据没有固定表结构,数据以集合 (Collection) 、文档 (Document) 的形式存储。
- 文档:类似 JSON 对象,键值对存储数据,对应 MySQL 的一行记录
- 集合:多个文档放在一起,对应 MySQL 的一张表
- 数据库:多个集合组成数据库
对比 MySQL:
表格
| MySQL | MongoDB |
|---|---|
| 数据库 (database) | 数据库 (database) |
| 表 (table) | 集合 (collection) |
| 行 (row) | 文档 (document) |
| 列 (column) | 字段 (field) |
特点:schema‑less,不需要提前定义字段,新增字段直接写即可,适合快速迭代项目。
二、Ubuntu Linux 安装 MongoDB‑7.0
系统版本:Ubuntu jammy (22.04),安装 MongoDB 7.0 版本
#1 更新软件源
sudo apt update
#2 安装依赖工具 gnupg、curl
sudo apt install gnupg curl
#3 导入MongoDB官方GPG密钥
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
#4 添加mongodb软件源
echo "deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
#5 更新源
sudo apt update
#6 安装mongodb服务端
sudo apt install mongodb-org
启动、进入数据库
#后台启动mongodb,指定配置文件,输出日志
sudo nohup mongod --config /etc/mongod.conf > /var/log/mongodb/mongod.log 2>&1 &
#进入mongodb交互shell
mongosh
补充常用系统命令
# systemd方式启动(推荐)
sudo systemctl start mongod
sudo systemctl enable mongod
sudo systemctl status mongod
三、MongoDB 常用指令(mongosh 内部执行)
1. 数据库操作
show dbs //查看所有数据库
use user //切换/创建数据库user,不存在则延迟创建
db //查看当前所在数据库
db.dropDatabase() //删除当前数据库
exit //退出mongosh终端
注意:use 创建数据库不会立刻出现 show dbs,插入第一条数据后数据库才真正生成。
2. 集合操作
show collections //查看当前库下所有集合
db.createCollection("student") //显式创建集合student
db.student.drop() //删除student集合
小技巧:不需要手动 createCollection,往不存在的集合插入文档,集合会自动创建。
3. 文档 - 插入数据 insert
//单条插入
db.student.insert({name:"张三",age:18,gender:"男"})
//多条插入,传入数组
db.student.insert([{name:"李四",age:20},{name:"王五",age:22}])
insertOne ():专门插入单条;insertMany () 专门插入多条,生产环境更推荐。
4. 查询 find 查询文档
db.student.find() //查询全部文档
db.student.find({age:18}) //条件查询 age等于18
db.student.findOne({age:18}) //只匹配返回第一条数据
db.student.find().pretty() //格式化输出,可读性更好
5. 修改 update 更新文档
-
覆盖更新(危险!会把整个文档替换)
db.student.update({name:"张三"},{age:25})
⚠️ 上面写法会直接覆盖,name 字段直接丢失,一般业务不用。
-
局部更新 $set(推荐,只修改指定字段)
db.student.update({name:"张三"},{$set:{age:25,gender:"女"}})
-
更新多条 multi:true
//匹配所有gender="男",把age改成30
db.student.update({gender:"男"},{$set:{age:30}},{multi:true})
6. 删除 remove 删除文档
db.student.remove({}) //删除集合全部文档(集合还在)
db.student.remove({name:"李四"}) //删除匹配条件的文档
新版本推荐
deleteOne()、deleteMany(),语义更清晰。
7. 统计、排序、分页
//统计数量
db.student.find({age:{$gt:18}}).count()
db.student.count()
//排序 sort:1升序,-1降序
db.student.find().sort({age:1})
//分页 skip跳过多少条,limit取多少条
db.student.find().skip(2).limit(3)
skip(2):跳过前 2 条limit(3):最多返回 3 条
四、运算符简单补充
$gt:大于$gte:大于等于$lt:小于$lte:小于等于$ne:不等于
示例:db.student.find({age:{$gt:18}}) 查询年龄大于 18。
五、MongoDB 小坑总结
- 数据库
use xxx不会立刻新建,插入数据才真实存在; - update 默认只更新第一条,更新多条必须加
{multi:true}; - update 不加
$set是覆盖更新,字段丢失,线上禁止乱用; - remove ({}) 清空文档不等于删除集合,集合结构还保留;
- mongodb 区分大小写,字段名、字符串值大小写敏感。
六、Python 简单对接 MongoDB(拓展)
使用 pymongo 库
from pymongo import MongoClient
client = MongoClient("mongodb://127.0.0.1:27017")
db = client["user"]
col = db["student"]
#插入
col.insert_one({"name":"小明","age":19})
#查询
res = col.find()
for item in res:
print(item)
七、适用场景
✅ 适合:
- 快速迭代项目,字段经常变动
- 日志存储、用户行为数据
- 大数据量,高读写,不需要复杂多表联查
❌ 不适合:
- 需要大量事务、强一致性、复杂多表 join 业务