Appearance
MongoDB
什么是 MongoDB
MongoDB 是一个开源的文档型数据库,属于 NoSQL 数据库的一种。它使用 BSON(类似于 JSON 的二进制格式)存储数据,具有高性能、高可用性和可扩展性的特点。MongoDB 适用于处理大量非结构化数据的场景,如社交网络、内容管理系统和实时分析等。
MongoDB 的特点
1. 文档模型
- 使用 BSON 格式存储数据
- 灵活的 schema,无需预定义表结构
- 支持嵌套文档和数组
2. 高性能
- 内存映射存储引擎
- 索引支持
- 聚合管道
3. 可扩展性
- 水平扩展能力
- 分片集群
- 复制集
4. 高可用性
- 自动故障转移
- 数据冗余
- 复制集
5. 丰富的查询语言
- 支持复杂查询
- 支持聚合操作
- 支持全文搜索
安装 MongoDB
Windows
- 访问 MongoDB 官网
- 下载 MongoDB Community Server
- 运行安装程序
- 按照向导完成安装
macOS
- 使用 Homebrew 安装:
brew install mongodb-community - 或下载 MongoDB 安装包
Linux
bash
# Ubuntu/Debian
sudo apt update
sudo apt install mongodb-org
# CentOS/RHEL
sudo yum install mongodb-org
sudo systemctl start mongod
sudo systemctl enable mongodMongoDB 基本操作
连接数据库
bash
mongo查看数据库
javascript
show dbs创建/使用数据库
javascript
use database_name创建集合
javascript
db.createCollection('collection_name')插入文档
javascript
db.collection_name.insertOne({ name: 'John Doe', email: 'john@example.com' })
db.collection_name.insertMany([
{ name: 'John Doe', email: 'john@example.com' },
{ name: 'Jane Doe', email: 'jane@example.com' }
])查询文档
javascript
db.collection_name.find()
db.collection_name.find({ name: 'John Doe' })
db.collection_name.findOne({ _id: ObjectId('5f8d0f4a9b1b2c3d4e5f6g7h') })更新文档
javascript
db.collection_name.updateOne(
{ name: 'John Doe' },
{ $set: { email: 'john.doe@example.com' } }
)
db.collection_name.updateMany(
{ age: { $lt: 30 } },
{ $set: { status: 'young' } }
)删除文档
javascript
db.collection_name.deleteOne({ name: 'John Doe' })
db.collection_name.deleteMany({ age: { $gt: 60 } })MongoDB 与 Node.js 集成
安装 MongoDB 驱动
bash
npm install mongodb
# 或使用 Mongoose
npm install mongoose使用 mongodb 驱动
javascript
const { MongoClient } = require('mongodb');
const uri = 'mongodb://localhost:27017';
const client = new MongoClient(uri);
async function main() {
try {
await client.connect();
console.log('Connected to MongoDB');
const db = client.db('database_name');
const collection = db.collection('collection_name');
// 插入文档
const result = await collection.insertOne({ name: 'John Doe', email: 'john@example.com' });
console.log(`Inserted document with _id: ${result.insertedId}`);
// 查询文档
const documents = await collection.find({}).toArray();
console.log(documents);
} finally {
await client.close();
}
}
main();使用 Mongoose
javascript
const mongoose = require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/database_name', {
useNewUrlParser: true,
useUnifiedTopology: true
});
// 定义模型
const User = mongoose.model('User', {
name: String,
email: String,
age: Number
});
// 创建文档
const user = new User({ name: 'John Doe', email: 'john@example.com', age: 30 });
user.save()
.then(() => console.log('User saved'))
.catch(err => console.error(err));
// 查询文档
User.find({ age: { $gt: 25 } })
.then(users => console.log(users))
.catch(err => console.error(err));MongoDB 最佳实践
1. 数据模型设计
- 设计适合应用的数据模型
- 合理使用嵌入和引用
- 避免过度规范化
2. 索引
- 为常用查询创建索引
- 避免过多索引
- 使用复合索引
3. 性能优化
- 使用合适的查询
- 限制返回的字段
- 使用聚合管道
4. 安全性
- 使用认证
- 限制网络访问
- 加密敏感数据
5. 备份和恢复
- 定期备份数据
- 使用复制集
- 制定灾难恢复计划
MongoDB 常见问题
1. 连接问题
- 检查网络连接
- 确认 MongoDB 服务运行
- 检查认证信息
2. 性能问题
- 创建适当的索引
- 优化查询
- 调整服务器配置
3. 数据一致性问题
- 使用事务
- 正确处理错误
- 定期备份
4. 安全问题
- 启用认证
- 限制用户权限
- 使用 SSL
学习资源
实践练习
- 安装和配置 MongoDB
- 创建数据库和集合
- 插入、查询、更新和删除文档
- 与 Node.js 集成
- 优化 MongoDB 性能