MongoDB 入门操作指南

文章目录

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

MongoDB 入门操作指南

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

1. 连接到 MongoDB 数据库

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

bash 复制代码
mongo

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

2. 查看当前数据库

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

javascript 复制代码
db

3. 显示所有数据库

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

javascript 复制代码
show databases

4. 切换或创建数据库

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

javascript 复制代码
use <database_name>

例如:

javascript 复制代码
use mydb

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

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

javascript 复制代码
show collections

6. 创建集合

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

javascript 复制代码
db.createCollection("<collection_name>")

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

7. 插入文档

插入单个文档

javascript 复制代码
db.<collection_name>.insertOne({key1: value1, key2: value2})

插入多个文档

javascript 复制代码
db.<collection_name>.insertMany([{key1: value1}, {key2: value2}])

8. 查询文档

查询所有文档

javascript 复制代码
db.<collection_name>.find()

查询匹配条件的文档

javascript 复制代码
db.<collection_name>.find({key: value})

格式化查询输出

javascript 复制代码
db.<collection_name>.find({key: value}).pretty()

9. 更新文档

更新单个文档

javascript 复制代码
db.<collection_name>.updateOne({key: value}, {$set: {key1: new_value}})

更新多个文档

javascript 复制代码
db.<collection_name>.updateMany({key: value}, {$set: {key1: new_value}})

10. 删除文档

删除单个文档

javascript 复制代码
db.<collection_name>.deleteOne({key: value})

删除多个文档

javascript 复制代码
db.<collection_name>.deleteMany({key: value})

11. 删除集合

javascript 复制代码
db.<collection_name>.drop()

12. 删除数据库

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

javascript 复制代码
db.dropDatabase()

13. 索引操作

创建索引

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

查看索引

javascript 复制代码
db.<collection_name>.getIndexes()

删除索引

javascript 复制代码
db.<collection_name>.dropIndex(<index_name>)

13. 索引操作

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

13.1 创建索引

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

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

示例

javascript 复制代码
// 为字段 "name" 创建升序索引
db.users.createIndex({ name: 1 })

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

13.2 创建复合索引

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

javascript 复制代码
db.<collection_name>.createIndex({ field1: 1, field2: -1 })

示例

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

13.3 唯一索引

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

javascript 复制代码
db.<collection_name>.createIndex({ <field_name>: 1 }, { unique: true })

示例

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

13.4 查看索引

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

javascript 复制代码
db.<collection_name>.getIndexes()

示例

javascript 复制代码
// 查看 users 集合的所有索引
db.users.getIndexes()

13.5 删除索引

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

javascript 复制代码
db.<collection_name>.dropIndex(<index_name>)

示例

javascript 复制代码
// 删除 "name" 字段的索引
db.users.dropIndex('name_1')

13.6 删除所有索引

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

javascript 复制代码
db.<collection_name>.dropIndexes()

示例

javascript 复制代码
// 删除 users 集合中的所有索引
db.users.dropIndexes()

14. 聚合操作

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

14.1 聚合管道基础

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

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

14.2 常见的聚合操作符

14.2.1 $match

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

javascript 复制代码
db.<collection_name>.aggregate([
    { $match: { age: { $gt: 30 } } }
])

示例

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

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

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

示例

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

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

javascript 复制代码
db.<collection_name>.aggregate([
    { $sort: { age: -1 } }
])

示例

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

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

javascript 复制代码
db.<collection_name>.aggregate([
    { $project: { field1: 1, field2: 1 } }
])

示例

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

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

javascript 复制代码
db.<collection_name>.aggregate([
    { $limit: 5 }
])

示例

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

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

javascript 复制代码
db.<collection_name>.aggregate([
    { $skip: 10 }
])

示例

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

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

javascript 复制代码
db.<collection_name>.aggregate([
    { $unwind: "$array_field" }
])

示例

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

14.3 复杂的聚合管道示例

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

javascript 复制代码
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 及以上版本,你可以使用事务来保证一系列操作的原子性。

javascript 复制代码
// 开始一个会话并启动事务
const session = db.getMongo().startSession();
session.startTransaction();

// 执行数据库操作

// 提交事务
session.commitTransaction();

// 回滚事务
session.abortTransaction();

// 结束会话
session.endSession();
相关推荐
隔壁老王156几秒前
mysql实时同步到es
数据库·mysql·elasticsearch
想要打 Acm 的小周同学呀23 分钟前
Redis三剑客解决方案
数据库·redis·缓存
rkmhr_sef24 分钟前
Redis 下载与安装 教程 windows版
数据库·windows·redis
库库林_沙琪马2 小时前
Redis 缓存穿透、击穿、雪崩:问题与解决方案
数据库·redis·缓存
Hanson Huang2 小时前
【存储中间件API】MySQL、Redis、MongoDB、ES常见api操作及性能比较
redis·mysql·mongodb·es
黄雪超2 小时前
大数据SQL调优专题——引擎优化
大数据·数据库·sql
LUCIAZZZ3 小时前
EasyExcel快速入门
java·数据库·后端·mysql·spring·spring cloud·easyexcel
落落落sss3 小时前
MongoDB
数据库·windows·redis·mongodb·微服务·wpf
wolf犭良3 小时前
19、《Springboot+MongoDB整合:玩转文档型数据库》
数据库·spring boot·mongodb
yuanbenshidiaos3 小时前
【正则表达式】
数据库·mysql·正则表达式