Skip to content

MongoDB

什么是 MongoDB

MongoDB 是一个开源的文档型数据库,属于 NoSQL 数据库的一种。它使用 BSON(类似于 JSON 的二进制格式)存储数据,具有高性能、高可用性和可扩展性的特点。MongoDB 适用于处理大量非结构化数据的场景,如社交网络、内容管理系统和实时分析等。

MongoDB 的特点

1. 文档模型

  • 使用 BSON 格式存储数据
  • 灵活的 schema,无需预定义表结构
  • 支持嵌套文档和数组

2. 高性能

  • 内存映射存储引擎
  • 索引支持
  • 聚合管道

3. 可扩展性

  • 水平扩展能力
  • 分片集群
  • 复制集

4. 高可用性

  • 自动故障转移
  • 数据冗余
  • 复制集

5. 丰富的查询语言

  • 支持复杂查询
  • 支持聚合操作
  • 支持全文搜索

安装 MongoDB

Windows

  1. 访问 MongoDB 官网
  2. 下载 MongoDB Community Server
  3. 运行安装程序
  4. 按照向导完成安装

macOS

  1. 使用 Homebrew 安装:brew install mongodb-community
  2. 或下载 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 mongod

MongoDB 基本操作

连接数据库

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

学习资源

实践练习

  1. 安装和配置 MongoDB
  2. 创建数据库和集合
  3. 插入、查询、更新和删除文档
  4. 与 Node.js 集成
  5. 优化 MongoDB 性能

基于 VitePress 的本地知识库