MongoDB 是一个开源的 NoSQL 数据库,以高性能、高扩展性和灵活的数据模型著称。它使用 文档存储模型(类似 JSON 格式的 BSON),适合处理非结构化或半结构化数据。以下是详细介绍:
一、MongoDB 核心特性
-
文档存储
- 数据以 BSON(Binary JSON)格式存储,支持嵌套对象、数组等复杂结构。
- 示例文档:
{ "_id": ObjectId("5f9d1a2d3c4e5b6a7d8e9f0a"), "name": "Alice", "age": 30, "address": { "city": "New York", "zip": "10001" }, "tags": ["developer", "mongodb"] }
-
灵活的模式(Schema-less)
- 同一集合(Collection)中的文档可以有不同的字段结构,无需预先定义表结构。
-
水平扩展(分片)
- 通过分片(Sharding)技术将数据分布到多个服务器,支持海量数据存储。
-
高可用性
- 支持副本集(Replica Set),自动故障转移,保障数据冗余和可用性。
-
丰富的查询语言
- 支持复杂查询、聚合、地理空间查询等。
二、MongoDB 基本概念
-
数据库(Database)
- 存储多个集合(类似关系型数据库中的“库”)。
- 命令示例:
use mydb
(切换到mydb
数据库)。
-
集合(Collection)
- 存储多个文档(类似关系型数据库中的“表”)。
- 示例:
db.users
表示操作users
集合。
-
文档(Document)
- 数据的基本单元,对应关系型数据库中的“行”。
-
索引(Index)
- 提升查询性能,支持单字段、复合、全文、地理空间索引等。
三、基本语法与操作
1. 连接 MongoDB
# 使用命令行工具连接(默认端口 27017)
mongosh "mongodb://localhost:27017"
2. 数据库操作
// 查看所有数据库
show dbs
// 切换/创建数据库
use mydb
// 删除当前数据库
db.dropDatabase()
3. 集合操作
// 创建集合(可选配置)
db.createCollection("users", { capped: true, size: 100000 })
// 查看所有集合
show collections
// 删除集合
db.users.drop()
4. CRUD 操作
-
插入文档
// 插入单条文档 db.users.insertOne({ name: "Bob", age: 25, email: "bob@example.com" }); // 插入多条文档 db.users.insertMany([ { name: "Charlie", age: 28 }, { name: "Diana", age: 32 } ]);
-
查询文档
// 查询所有文档 db.users.find(); // 条件查询(等于) db.users.find({ age: 25 }); // 条件查询(范围:age > 25) db.users.find({ age: { $gt: 25 } }); // 限制返回字段(仅返回 name 和 age) db.users.find({}, { name: 1, age: 1, _id: 0 }); // 排序(按 age 降序) db.users.find().sort({ age: -1 }); // 分页(跳过前 5 条,取 10 条) db.users.find().skip(5).limit(10);
-
更新文档
// 更新单条文档(age 改为 26) db.users.updateOne( { name: "Bob" }, { $set: { age: 26 } } ); // 更新多条文档(所有 age > 25 的文档添加字段) db.users.updateMany( { age: { $gt: 25 } }, { $set: { status: "active" } } );
-
删除文档
// 删除单条文档 db.users.deleteOne({ name: "Bob" }); // 删除多条文档 db.users.deleteMany({ age: { $lt: 30 } });
5. 索引操作
// 创建单字段索引
db.users.createIndex({ name: 1 }); // 1 表示升序,-1 表示降序
// 创建复合索引
db.users.createIndex({ name: 1, age: -1 });
// 查看所有索引
db.users.getIndexes();
// 删除索引
db.users.dropIndex("name_1");
6. 聚合操作(Aggregation Pipeline)
// 统计每个城市的平均年龄
db.users.aggregate([
{ $group: { _id: "$address.city", avgAge: { $avg: "$age" } } },
{ $sort: { avgAge: -1 } }
]);
四、常用查询运算符
- 比较运算符:
$eq
,$ne
,$gt
,$gte
,$lt
,$lte
- 逻辑运算符:
$and
,$or
,$not
,$nor
- 数组运算符:
$in
,$nin
,$all
,$elemMatch
- 字段存在性:
$exists: true
- 正则匹配:
{ name: { $regex: /^A/ } }
五、安全与权限
-
启用身份验证
在配置文件中设置security.authorization: enabled
。 -
创建用户
use admin db.createUser({ user: "admin", pwd: "password", roles: ["root"] });
-
用户角色
read
:只读权限readWrite
:读写权限dbAdmin
:数据库管理权限userAdmin
:用户管理权限
六、部署与工具
-
安装 MongoDB
- 官网下载:https://www.mongodb.com/try/download/community
-
命令行工具
mongosh
:MongoDB 的交互式 Shell。mongodump
/mongorestore
:备份与恢复工具。
-
图形化工具
- MongoDB Compass(官方 GUI)
- DataGrip(推荐)
七、适用场景
- 实时数据分析(如日志、传感器数据)
- 内容管理系统(CMS)
- 移动应用后端(灵活的数据模型)
- 物联网(IoT)(高写入吞吐量)
八、注意事项
- 虽然 MongoDB 支持灵活的模式,但设计合理的文档结构对性能至关重要。
- 避免过度嵌套文档,防止查询性能下降。
- 合理使用索引,但避免过多索引影响写入性能。
通过以上内容,你可以快速上手 MongoDB 的基本操作!如果需要进一步学习,建议参考官方文档:https://docs.mongodb.com/