当前位置: 首页 > news >正文

MongoDB 入门操作指南

文章目录

  • MongoDB 入门操作指南
    • 1. 连接到 MongoDB 数据库
    • 2. 查看当前数据库
    • 3. 显示所有数据库
    • 4. 切换或创建数据库
    • 5. 查看当前数据库中的所有集合
    • 6. 创建集合
    • 7. 插入文档
      • 插入单个文档
      • 插入多个文档
    • 8. 查询文档
      • 查询所有文档
      • 查询匹配条件的文档
      • 格式化查询输出
    • 9. 更新文档
      • 更新单个文档
      • 更新多个文档
    • 10. 删除文档
      • 删除单个文档
      • 删除多个文档
    • 11. 删除集合
    • 12. 删除数据库
    • 13. 索引操作
      • 创建索引
      • 查看索引
      • 删除索引
    • 13. 索引操作
      • 13.1 创建索引
      • 13.2 创建复合索引
      • 13.3 唯一索引
      • 13.4 查看索引
      • 13.5 删除索引
      • 13.6 删除所有索引
    • 14. 聚合操作
      • 14.1 聚合管道基础
      • 14.2 常见的聚合操作符
        • 14.2.1 `$match`
        • 14.2.2 `$group`
        • 14.2.3 `$sort`
        • 14.2.4 `$project`
        • 14.2.5 `$limit`
        • 14.2.6 `$skip`
        • 14.2.7 `$unwind`
      • 14.3 复杂的聚合管道示例
    • 15. 事务操作(需要 MongoDB 4.0+ 支持)

MongoDB 入门操作指南

MongoDB 是一个开源的 NoSQL 数据库,它基于文档存储数据,适用于大量非结构化数据。本文将介绍 MongoDB 的一些常见操作和基本命令,帮助你快速入门。

1. 连接到 MongoDB 数据库

首先,你需要在命令行中运行以下命令来连接到 MongoDB 实例:

mongo

此命令将连接到默认的 localhost:27017 地址的 MongoDB 实例。

2. 查看当前数据库

连接到 MongoDB 后,你可以查看当前使用的数据库:

db

3. 显示所有数据库

要查看当前 MongoDB 实例中的所有数据库,可以运行以下命令:

show databases

4. 切换或创建数据库

你可以使用以下命令切换到一个已有的数据库,或者如果该数据库不存在,它会被创建:

use <database_name>

例如:

use mydb

5. 查看当前数据库中的所有集合

要查看当前数据库中的所有集合,可以使用以下命令:

show collections

6. 创建集合

你可以显式地创建一个集合,使用以下命令:

db.createCollection("<collection_name>")

如果你插入数据时指定了集合名,MongoDB 会自动创建该集合。

7. 插入文档

插入单个文档

db.<collection_name>.insertOne({key1: value1, key2: value2})

插入多个文档

db.<collection_name>.insertMany([{key1: value1}, {key2: value2}])

8. 查询文档

查询所有文档

db.<collection_name>.find()

查询匹配条件的文档

db.<collection_name>.find({key: value})

格式化查询输出

db.<collection_name>.find({key: value}).pretty()

9. 更新文档

更新单个文档

db.<collection_name>.updateOne({key: value}, {$set: {key1: new_value}})

更新多个文档

db.<collection_name>.updateMany({key: value}, {$set: {key1: new_value}})

10. 删除文档

删除单个文档

db.<collection_name>.deleteOne({key: value})

删除多个文档

db.<collection_name>.deleteMany({key: value})

11. 删除集合

db.<collection_name>.drop()

12. 删除数据库

如果你想删除整个数据库,可以使用以下命令:

db.dropDatabase()

13. 索引操作

创建索引

db.<collection_name>.createIndex({key: 1})  // 1 表示升序,-1 表示降序

查看索引

db.<collection_name>.getIndexes()

删除索引

db.<collection_name>.dropIndex(<index_name>)

13. 索引操作

MongoDB 提供了索引功能来提高查询性能。索引类似于书本的目录,可以加速文档的查找。以下是一些常见的索引操作。

13.1 创建索引

你可以在集合中为一个或多个字段创建索引。创建索引的基本语法如下:

db.<collection_name>.createIndex({ <field_name>: <order> })
  • <field_name>: 要创建索引的字段。
  • <order>: 1 表示升序索引,-1 表示降序索引。

示例

// 为字段 "name" 创建升序索引
db.users.createIndex({ name: 1 })// 为字段 "age" 创建降序索引
db.users.createIndex({ age: -1 })

13.2 创建复合索引

你可以在多个字段上创建复合索引。复合索引的顺序非常重要,它会影响查询的效率。

db.<collection_name>.createIndex({ field1: 1, field2: -1 })

示例

// 为字段 "name" 和 "age" 创建复合索引
db.users.createIndex({ name: 1, age: -1 })

13.3 唯一索引

如果你希望某个字段的值是唯一的,可以创建唯一索引。唯一索引可以防止插入重复的数据。

db.<collection_name>.createIndex({ <field_name>: 1 }, { unique: true })

示例

// 为 "email" 字段创建唯一索引
db.users.createIndex({ email: 1 }, { unique: true })

13.4 查看索引

要查看集合中已创建的索引,可以使用 getIndexes() 方法:

db.<collection_name>.getIndexes()

示例

// 查看 users 集合的所有索引
db.users.getIndexes()

13.5 删除索引

如果索引不再需要,或者索引不再提供优化性能,可以删除索引。

db.<collection_name>.dropIndex(<index_name>)

示例

// 删除 "name" 字段的索引
db.users.dropIndex('name_1')

13.6 删除所有索引

如果你希望删除集合中的所有索引(除了默认的 _id 索引),可以使用 dropIndexes() 方法:

db.<collection_name>.dropIndexes()

示例

// 删除 users 集合中的所有索引
db.users.dropIndexes()

14. 聚合操作

MongoDB 的聚合框架允许你执行更复杂的查询,支持数据过滤、排序、分组和变换。聚合操作以管道形式表达,通常由多个阶段组成。

14.1 聚合管道基础

一个简单的聚合管道包含多个阶段,每个阶段都通过一个特定的操作符来处理数据。常见的操作符有 $match$group$sort$project 等。

db.<collection_name>.aggregate([{ $match: { key: value } },  // 筛选符合条件的数据{ $group: { _id: "$field", total: { $sum: "$value" } } }  // 根据某个字段进行分组,并计算总和
])

14.2 常见的聚合操作符

14.2.1 $match

$match 用于筛选符合条件的文档,类似于 SQL 的 WHERE 子句。

db.<collection_name>.aggregate([{ $match: { age: { $gt: 30 } } }
])

示例

// 查询年龄大于 30 的用户
db.users.aggregate([{ $match: { age: { $gt: 30 } } }
])
14.2.2 $group

$group 用于根据指定字段对文档进行分组,并执行聚合操作,如求和、平均值等。

db.<collection_name>.aggregate([{ $group: { _id: "$field", total: { $sum: "$value" } } }
])

示例

// 按年龄分组,并计算每个年龄段的用户数量
db.users.aggregate([{ $group: { _id: "$age", count: { $sum: 1 } } }
])
14.2.3 $sort

$sort 用于对查询结果进行排序,类似于 SQL 的 ORDER BY 子句。

db.<collection_name>.aggregate([{ $sort: { age: -1 } }
])

示例

// 按年龄降序排序
db.users.aggregate([{ $sort: { age: -1 } }
])
14.2.4 $project

$project 用于指定文档中返回哪些字段,可以用来添加、修改或删除字段。

db.<collection_name>.aggregate([{ $project: { field1: 1, field2: 1 } }
])

示例

// 返回用户的姓名和年龄字段
db.users.aggregate([{ $project: { name: 1, age: 1 } }
])
14.2.5 $limit

$limit 用于限制返回的文档数量,类似于 SQL 的 LIMIT 子句。

db.<collection_name>.aggregate([{ $limit: 5 }
])

示例

// 返回前 5 个用户
db.users.aggregate([{ $limit: 5 }
])
14.2.6 $skip

$skip 用于跳过指定数量的文档,常用于分页。

db.<collection_name>.aggregate([{ $skip: 10 }
])

示例

// 跳过前 10 个用户,返回后续的用户
db.users.aggregate([{ $skip: 10 }
])
14.2.7 $unwind

$unwind 用于拆分数组字段,每个数组元素将变为一个单独的文档。

db.<collection_name>.aggregate([{ $unwind: "$array_field" }
])

示例

// 拆分包含多个订单的用户文档
db.users.aggregate([{ $unwind: "$orders" }
])

14.3 复杂的聚合管道示例

假设我们有一个 orders 集合,其中包含用户的订单信息,每个订单记录包括 user_idtotal_amount。我们想按 user_id 分组,计算每个用户的总订单金额。

db.orders.aggregate([{ $group: { _id: "$user_id", totalSpent: { $sum: "$total_amount" } } },{ $sort: { totalSpent: -1 } }
])

此管道会根据 user_id 分组,并计算每个用户的 total_amount 总和,然后按总金额降序排序。

15. 事务操作(需要 MongoDB 4.0+ 支持)

在 MongoDB 4.0 及以上版本,你可以使用事务来保证一系列操作的原子性。

// 开始一个会话并启动事务
const session = db.getMongo().startSession();
session.startTransaction();// 执行数据库操作// 提交事务
session.commitTransaction();// 回滚事务
session.abortTransaction();// 结束会话
session.endSession();
http://www.lryc.cn/news/536663.html

相关文章:

  • 共享设备管理难?MDM助力Kiosk模式一键部署
  • HttpClient-Java程序中发送Http请求
  • 硬件-电源-隔离与非隔离的区别
  • Kubernetes 最佳实践:Top 10 常见 DevOps/SRE 面试问题及答案
  • Training for Computer Use
  • PH热榜 | 2025-02-14
  • 工业物联网远程监控系统优化方案,基于巨控GRM553Y-CHE
  • 报名丨Computer useVoice Agent :使用 TEN 搭建你的 Mac Assistant
  • Flutter 中的生命周期
  • 深度整理总结MySQL——redoLog日志工作原理
  • 备战蓝桥杯 Day1 回顾语言基础
  • 小记大模型本地部署:vllm, lmdeploy, ollama
  • MySQL查看存储过程和存储函数
  • 从零到一:开发并上线一款极简记账本小程序的完整流程
  • 卷积神经网络实战人脸检测与识别
  • 【面试题系列】Java 多线程面试题深度解析
  • 【C语言】左旋字符串(三种实现方式)
  • 数论补充 之 前后缀分解问题
  • IoTDB 集群节点 IP 改变,如何更新集群
  • 【AI系列】从零开始学习大模型GPT (2)- Build a Large Language Model (From Scratch)
  • webshell通信流量分析
  • 数据可视化+SpringBoot+协同过滤推荐算法的美食点餐管理平台
  • DeepSeek 关联 Word 使用教程:解锁办公新效率
  • [极客大挑战 2019]Havefun1
  • 基于Swift实现仿IOS闹钟
  • Threadlocal的实现原理
  • 线程池处理异常
  • RabbitMQ配置SSL证书
  • .NET 9.0 的 Blazor Web App 项目,进度条 <progress> 组件使用注意事项
  • 第J7周:对于ResNeXt-50算法的思考