MongoDB简介
MongoDB是一个开源的NoSQL数据库,采用文档存储方式,使用BSON(Binary JSON)格式存储数据。它具有以下特点:
- 面向文档的存储:数据以JSON-like的文档形式存储
- 灵活的模式:不需要预定义表结构
- 高可扩展性:支持水平扩展
- 丰富的查询语言:支持复杂的查询操作
- 支持索引:提高查询性能
- 支持复制和故障转移:保证高可用性
- 支持分片:处理大规模数据
基本概念
| 关系型数据库 |
MongoDB |
| 数据库(Database) |
数据库(Database) |
| 表(Table) |
集合(Collection) |
| 行(Row) |
文档(Document) |
| 列(Column) |
字段(Field) |
| 索引(Index) |
索引(Index) |
| 主键(Primary Key) |
_id字段 |
常用命令
数据库操作
1 2 3 4 5 6 7 8 9 10 11
| show dbs
use mydb
db
db.dropDatabase()
|
集合操作
1 2 3 4 5 6 7 8
| db.createCollection("users")
show collections
db.users.drop()
|
文档操作
插入文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| db.users.insertOne({ name: "John", age: 30, email: "john@example.com", address: { street: "123 Main St", city: "New York" }, hobbies: ["reading", "hiking", "coding"] })
db.users.insertMany([ { name: "Alice", age: 25, email: "alice@example.com" }, { name: "Bob", age: 35, email: "bob@example.com" } ])
|
查询文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| db.users.find()
db.users.find({ age: { $gt: 25 } })
db.users.find({ age: { $gt: 25 } }, { name: 1, email: 1, _id: 0 })
db.users.find().sort({ age: 1 }) db.users.find().sort({ age: -1 })
db.users.find().limit(5)
db.users.find().skip(5)
db.users.aggregate([ { $match: { age: { $gt: 25 } } }, { $group: { _id: "$age", count: { $sum: 1 } } }, { $sort: { count: -1 } } ])
|
更新文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| db.users.updateOne( { name: "John" }, { $set: { age: 31, email: "john.doe@example.com" } } )
db.users.updateMany( { age: { $lt: 30 } }, { $set: { status: "young" } } )
db.users.replaceOne( { name: "John" }, { name: "John Doe", age: 31, email: "john.doe@example.com" } )
|
删除文档
1 2 3 4 5
| db.users.deleteOne({ name: "John" })
db.users.deleteMany({ age: { $lt: 25 } })
|
索引操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| db.users.createIndex({ name: 1 })
db.users.createIndex({ name: 1, age: -1 })
db.users.createIndex({ email: 1 }, { unique: true })
db.users.getIndexes()
db.users.dropIndex({ name: 1 })
|
高级功能
复制集(Replica Set)
复制集是一组维护相同数据集的MongoDB实例,提供冗余和高可用性。
分片集群(Sharded Cluster)
分片集群将数据分布在多个服务器上,支持水平扩展。
GridFS
GridFS用于存储和检索超过BSON文档大小限制(16MB)的文件。
性能优化
- 使用索引:为常用查询字段创建索引
- 合理设计模式:根据查询模式设计文档结构
- 使用聚合管道:减少客户端数据处理
- 批量操作:使用批量插入和更新
- 监控性能:使用mongostat和mongotop监控性能
- 适当的硬件配置:足够的内存和IOPS
备份与恢复
备份
1 2 3 4 5
| time mongodump --host localhost --port 27017 --db mydb --out /backup
time mongodump --host localhost --port 27017 --db mydb --collection users --out /backup
|
恢复
1 2 3 4 5
| time mongorestore --host localhost --port 27017 --db mydb /backup/mydb
time mongorestore --host localhost --port 27017 --db mydb --collection users /backup/mydb/users.bson
|
安全配置
- 启用认证:设置用户名和密码
- 限制网络访问:使用防火墙限制访问
- 使用TLS/SSL:加密数据传输
- 定期更新:保持MongoDB版本更新
- 审计日志:启用审计功能
常见问题解决
- 连接数过多:调整maxConnections参数
- 内存使用过高:合理设置WiredTiger缓存大小
- 索引碎片:定期重建索引
- 写入性能问题:使用批量写入和适当的索引
学习资源
官方文档
教程资源
- MongoDB基础教程
- MongoDB安装指南
- MongoDB增删查改操作
- MongoDB索引优化
- MongoDB复制集配置
- MongoDB分片集群
- MongoDB备份与恢复
工具
总结
MongoDB是一个功能强大的NoSQL数据库,适用于各种应用场景,从简单的Web应用到复杂的企业级系统。通过合理的设计和优化,可以充分发挥MongoDB的优势,构建高性能、可扩展的应用系统。