MongoDB数据库基础 :非关系型数据库入门与常用操作

目录

[一、什么是 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 更新文档

  1. 覆盖更新(危险!会把整个文档替换)

    db.student.update({name:"张三"},{age:25})

⚠️ 上面写法会直接覆盖,name 字段直接丢失,一般业务不用。

  1. 局部更新 $set(推荐,只修改指定字段)

    db.student.update({name:"张三"},{$set:{age:25,gender:"女"}})

  2. 更新多条 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 小坑总结

  1. 数据库 use xxx 不会立刻新建,插入数据才真实存在;
  2. update 默认只更新第一条,更新多条必须加 {multi:true}
  3. update 不加 $set 是覆盖更新,字段丢失,线上禁止乱用;
  4. remove ({}) 清空文档不等于删除集合,集合结构还保留;
  5. 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 业务
相关推荐
词却1 小时前
数据库基础:TCL事务与DDL视图
数据库
码农小麦1 小时前
LangChain 1.3.18 + DeepSeek-v4-flash 工具调用踩坑实录
网络·数据库·langchain
凯尔萨厮1 小时前
Java学习笔记十四(网络通信)
笔记·学习
FfHUCisI1 小时前
Golang 切片扩容策略
开发语言·数据库·golang
en.en..1 小时前
Ubuntu嵌入式开发 export环境变量
java·开发语言·数据库
攻城有术1 小时前
专项攻克——重写 Redis 依赖包方法的 6 种实现方式
java·数据库·redis·bootstrap
IvorySQL1 小时前
基于 PostgreSQL 的非线性回归原理与 AI 数据库融合实践
数据库·人工智能·postgresql
AAA代码批发商1 小时前
DAYS 38 TCP并发服务器模型详解
linux·网络·笔记·学习
zyf1044162 小时前
暑期实践日志 Day46:复盘第六章,规整对应实践成果
学习·计算机网络·剪辑·暑期实践·课题任务