如何在 MongoDB 中管理数据库

MongoDBMongoDBBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本全面教程深入探讨了MongoDB中的数据库管理复杂性,为开发人员和数据库管理员提供有效处理、查询和优化NoSQL数据库操作的基本技能。通过理解MongoDB的核心原理和高级技术,读者将获得有关创建、管理和扩展数据库系统的实用见解。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic Operations"]) mongodb(("MongoDB")) -.-> mongodb/QueryOperationsGroup(["Query Operations"]) mongodb(("MongoDB")) -.-> mongodb/IndexingGroup(["Indexing"]) mongodb(("MongoDB")) -.-> mongodb/AggregationOperationsGroup(["Aggregation Operations"]) mongodb/BasicOperationsGroup -.-> mongodb/start_mongodb_shell("Start MongoDB Shell") mongodb/BasicOperationsGroup -.-> mongodb/create_database_collection("Create Database and Collection") mongodb/BasicOperationsGroup -.-> mongodb/insert_document("Insert Document") mongodb/QueryOperationsGroup -.-> mongodb/find_documents("Find Documents") mongodb/QueryOperationsGroup -.-> mongodb/query_with_conditions("Query with Conditions") mongodb/IndexingGroup -.-> mongodb/create_index("Create Index") mongodb/AggregationOperationsGroup -.-> mongodb/group_documents("Group Documents") mongodb/AggregationOperationsGroup -.-> mongodb/aggregate_group_totals("Aggregate Group Totals") subgraph Lab Skills mongodb/start_mongodb_shell -.-> lab-435542{{"如何在 MongoDB 中管理数据库"}} mongodb/create_database_collection -.-> lab-435542{{"如何在 MongoDB 中管理数据库"}} mongodb/insert_document -.-> lab-435542{{"如何在 MongoDB 中管理数据库"}} mongodb/find_documents -.-> lab-435542{{"如何在 MongoDB 中管理数据库"}} mongodb/query_with_conditions -.-> lab-435542{{"如何在 MongoDB 中管理数据库"}} mongodb/create_index -.-> lab-435542{{"如何在 MongoDB 中管理数据库"}} mongodb/group_documents -.-> lab-435542{{"如何在 MongoDB 中管理数据库"}} mongodb/aggregate_group_totals -.-> lab-435542{{"如何在 MongoDB 中管理数据库"}} end

MongoDB 基础

什么是 MongoDB?

MongoDB 是一个广受欢迎的 NoSQL 数据库,具有高性能、高可用性和易于扩展的特点。与传统关系型数据库不同,MongoDB 将数据存储在灵活的、类似 JSON 的文档中,称为 BSON(二进制 JSON),这允许使用更动态且无模式的数据模型。

关键特性

面向文档的存储

MongoDB 将数据存储在集合中,集合类似于关系型数据库中的表。每个集合包含文档,文档类似于行,但更加灵活。

graph TD A[MongoDB] --> B[数据库] B --> C[集合 1] B --> D[集合 2] C --> E[文档 1] C --> F[文档 2] D --> G[文档 3] D --> H[文档 4]

数据模型比较

关系型数据库 MongoDB
数据库 数据库
集合
文档
字段

在 Ubuntu 22.04 上安装

要安装 MongoDB,请执行以下步骤:

## 导入 MongoDB 公共 GPG 密钥
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

## 添加 MongoDB 软件源
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

## 更新软件包数据库
sudo apt-get update

## 安装 MongoDB
sudo apt-get install -y mongodb-org

基本 MongoDB 概念

文档

MongoDB 中的文档是一组键值对,表示一条记录。示例:

{
   "_id": ObjectId("5099803df3f4948bd2f98391"),
   "name": "John Doe",
   "age": 30,
   "city": "New York"
}

集合

集合是 MongoDB 文档的分组,等同于关系型数据库中的表。

数据库

一个 MongoDB 服务器可以托管多个数据库,每个数据库包含多个集合。

基本操作

启动 MongoDB 服务

## 启动 MongoDB
sudo systemctl start mongod

## 检查状态
sudo systemctl status mongod

连接到 MongoDB

## 启动 MongoDB shell
mongosh

数据类型

MongoDB 支持多种数据类型:

  • 字符串
  • 整数
  • 双精度浮点数
  • 布尔值
  • 数组
  • 对象
  • 时间戳
  • 日期
  • 对象 ID

性能和可扩展性

MongoDB 提供:

  • 水平可扩展性
  • 分片
  • 复制
  • 索引
  • 聚合框架

用例

MongoDB 适用于:

  • 实时分析
  • 内容管理系统
  • 物联网应用
  • 移动应用
  • 缓存
  • 高速日志记录

最佳实践

  • 使用适当的索引
  • 避免过度规范化
  • 根据具体用例进行设计
  • 监控性能
  • 实施适当的安全措施

通过理解这些基础知识,你将为在项目中使用 MongoDB 做好充分准备。LabEx 建议通过实践练习来巩固这些概念,以获得实际经验。

数据库管理

数据库创建与选择

创建新数据库

在MongoDB中,你只需切换到它即可创建数据库:

## 进入MongoDB shell
mongosh

## 创建或切换到一个数据库
use labex_database

检查当前数据库

## 显示当前数据库
db

数据库操作

列出所有数据库

## 显示可用数据库
show dbs

数据库管理命令

graph TD A[数据库管理] --> B[创建] A --> C[删除] A --> D[重命名] A --> E[备份] A --> F[恢复]

创建集合

## 创建一个新集合

## 隐式创建集合

用户管理与认证

创建数据库用户

## 切换到admin数据库

## 创建一个新用户

用户角色

角色 描述
read 只读访问
readWrite 读写访问
dbAdmin 数据库管理
userAdmin 用户管理

数据库备份与恢复

Mongodump备份

## 备份整个数据库
mongodump --db labex_database --out /backup/directory

## 备份特定集合
mongodump --db labex_database --collection users

Mongorestore恢复

## 恢复整个数据库
mongorestore /backup/directory

## 恢复特定集合
mongorestore --db labex_database --collection users /backup/path

磁盘空间管理

检查数据库大小

## 获取数据库统计信息

## 检查集合大小

高级数据库配置

配置写关注

## 设置写关注

监控数据库性能

性能指标

## 检查当前操作

## 分析查询性能

数据库维护

压缩数据库

## 压缩数据库以回收磁盘空间

最佳实践

  • 定期备份数据库
  • 实施适当的用户访问控制
  • 监控数据库性能
  • 使用适当的索引
  • 有效管理磁盘空间

LabEx建议持续学习并积累数据库管理方面的实践经验,以熟练掌握MongoDB。

查询与优化

基本查询操作

简单查询

## 查找集合中的所有文档

## 查找满足特定条件的文档

查询运算符

运算符 描述 示例
$eq 等于 { field: { $eq: value } }
$gt 大于 { field: { $gt: value } }
$lt 小于 { field: { $lt: value } }
$in 匹配数组中的任何值 { field: { $in: [value1, value2] } }

高级查询

投影

## 选择特定字段

对结果进行排序和限制

## 对结果进行排序和限制

索引策略

graph TD A[索引] --> B[单字段索引] A --> C[复合索引] A --> D[多键索引] A --> E[文本索引] A --> F[地理空间索引]

创建索引

## 创建单字段索引

## 创建复合索引

查询优化技术

Explain方法

## 分析查询性能

性能指标

指标 描述
executionTimeMillis 查询总执行时间
totalDocsExamined 扫描的文档数量
totalKeysExamined 扫描的索引条目数量

聚合框架

基本聚合管道

db.sales.aggregate([
    { $match: { status: "completed" } },
    { $group: {
        _id: "$product",
        totalRevenue: { $sum: "$amount" }
    }},
    { $sort: { totalRevenue: -1 } }
])

查询性能优化

最佳实践

  • 使用适当的索引
  • 避免大型结果集
  • 使用投影来限制返回的字段
  • 利用聚合管道
  • 尽量减少文档扫描

缓存与性能

查询结果缓存

## 启用查询结果缓存

高级查询技术

文本搜索

## 创建文本索引

## 执行文本搜索

监控查询性能

性能分析

## 启用性能分析

## 查看慢查询

常见查询陷阱

  • 避免在大型集合上进行无索引查询
  • 谨慎使用复杂的聚合管道
  • 监控查询执行时间
  • 使用explain()来了解查询性能

LabEx建议持续练习和进行性能测试,以掌握MongoDB查询优化技术。

总结

MongoDB提供了强大的数据库管理功能,使开发人员能够应对复杂的数据存储和检索挑战。通过掌握诸如数据库创建、查询优化和性能调优之类的基本技术,专业人员可以利用MongoDB的灵活性和可扩展性来构建满足现代应用程序需求的强大、高效的数据库解决方案。