MongoDB 从入门到精通:安装配置与基础操作指令详解

发布于:2025-08-19 ⋅ 阅读:(19) ⋅ 点赞:(0)

MongoDB 作为最流行的 NoSQL 数据库之一,以其灵活的文档模型、强大的可扩展性深受开发者青睐。本文将从 MongoDB 的安装配置开始,系统讲解数据库、集合、文档的核心操作指令,帮助初学者快速上手 MongoDB 开发。

MongoDB 与关系型数据库概念对比

为帮助熟悉关系型数据库的开发者快速理解 MongoDB,这里提供一个概念对比表:

关系型数据库 MongoDB 说明
数据库(Database) 数据库(Database) 概念基本一致,都是数据容器
表(Table) 集合(Collection) 集合无需预定义结构
行(Row) 文档(Document) 文档使用 BSON 格式存储
列(Column) 字段(Field) 文档字段可动态添加
主键(Primary Key) _id 字段 MongoDB 自动生成唯一标识
索引(Index) 索引(Index) 支持多种索引类型

通过这种对应关系,你可以更快地将关系型数据库的知识迁移到 MongoDB 的学习中,同时注意两者在数据模型设计上的本质区别。

MongoDB 的灵活性使得它特别适合迭代速度快、数据结构复杂多变的应用场景,如内容管理系统、社交应用、物联网数据采集等。掌握本文介绍的基础操作,是深入学习 MongoDB 高级特性的必要前提。

一、MongoDB 安装

1.1 下载与安装

Windows 系统
1. 访问 MongoDB 官网(https://www.mongodb.com/try/download/community)下载对应版本的安装包
2. 运行安装程序,选择"Complete"完整安装
3. 勾选"Install MongoDB as a Service",将 MongoDB 安装为系统服务
4. 安装完成后,MongoDB 会自动启动,默认端口为 27017

1.2 验证安装

前提是配置好环境

二、数据库(Database)操作指令

MongoDB 中数据库是集合的容器,无需预先创建,在第一次使用时会自动创建。

2.1 查看数据库

# 查看所有数据库
show dbs

# 查看当前所在数据库
db

2.2 切换/创建数据库

# 切换到指定数据库,若不存在则创建
use 数据库名

# 示例:切换到 blog 数据库
use blog
> 注意:新创建的数据库不会立即显示在 `show dbs` 结果中,需至少插入一条数据后才会显示。

2.3 删除数据库

# 删除当前数据库
db.dropDatabase()

# 操作步骤示例
use test    # 切换到要删除的数据库
db.dropDatabase()  # 执行删除

 2.4 数据库相关其他操作

# 查看当前数据库状态
db.stats()

# 查看数据库中所有集合
show collections

三、集合(Collection)操作指令

集合类似于关系型数据库中的表,是文档的容器,同样无需预先创建,插入第一个文档时会自动创建。

3.1 创建集合

虽然集合会自动创建,但也可以手动创建并指定选项:

db.createCollection(集合名, [选项])

# 示例:创建名为 posts 的集合
db.createCollection("posts")

# 示例:创建带选项的集合(固定大小的 capped 集合)
db.createCollection("logs", {
  capped: true,    // 固定大小集合
  size: 1048576,   // 集合最大字节数(1MB)
  max: 1000        // 最多文档数量
})

3.2 查看集合

# 查看当前数据库所有集合
show collections
# 或
show tables

 3.3 删除集合

# 删除指定集合
db.集合名.drop()

# 示例:删除 comments 集合
db.comments.drop()

3.4 集合重命名

# 重命名集合
db.旧集合名.renameCollection(新集合名)

# 示例
db.posts.renameCollection("articles")

四、文档(Document)操作指令

文档是 MongoDB 中数据的基本单位,类似于关系型数据库中的行,采用 BSON 格式(JSON 的二进制扩展)存储。

4.1 插入文档

#### 插入单个文档
# 基本语法
db.集合名.insertOne(文档)

# 示例:向 users 集合插入一个用户文档
db.users.insertOne({
  name: "张三",
  age: 25,
  email: "zhangsan@example.com",
  hobbies: ["篮球", "编程"],
  createTime: new Date()
})
#### 插入多个文档
# 基本语法
db.集合名.insertMany([文档1, 文档2, ...])

# 示例:插入多个用户
db.users.insertMany([
  {
    name: "李四",
    age: 30,
    email: "lisi@example.com",
    hobbies: ["足球", "音乐"]
  },
  {
    name: "王五",
    age: 28,
    email: "wangwu@example.com",
    hobbies: ["阅读", "旅行"]
  }
])
> 注意:每个文档会自动生成一个 `_id` 字段作为唯一标识,也可以手动指定。

4.2 查询文档

#### 基本查询
# 查询集合中所有文档
db.集合名.find()

# 示例:查询 users 集合所有文档
db.users.find()

# 格式化输出
db.users.find().pretty()
#### 条件查询
# 基本语法
db.集合名.find(查询条件)

# 示例1:查询年龄为25的用户
db.users.find({ age: 25 })

# 示例2:查询年龄大于25的用户($gt 表示大于)
db.users.find({ age: { $gt: 25 } })

# 示例3:查询年龄在25到30之间的用户($gte 大于等于,$lte 小于等于)
db.users.find({ age: { $gte: 25, $lte: 30 } })

# 示例4:查询爱好包含"编程"的用户($in 表示包含)
db.users.find({ hobbies: { $in: ["编程"] } })

# 示例5:查询姓名为"张三"且年龄为25的用户(多条件且关系)
db.users.find({ name: "张三", age: 25 })

# 示例6:查询姓名为"张三"或年龄大于30的用户($or 表示或关系)
db.users.find({
  $or: [
    { name: "张三" },
    { age: { $gt: 30 } }
  ]
})
#### 投影查询(指定返回字段)
# 基本语法:1表示显示,0表示不显示(_id默认显示)
db.集合名.find(查询条件, { 字段1: 1, 字段2: 1, ... })

# 示例:只返回name和age字段,不返回_id
db.users.find({}, { name: 1, age: 1, _id: 0 })
#### 排序查询
# 基本语法:1表示升序,-1表示降序
db.集合名.find().sort(字段: 排序方式)

# 示例:按年龄降序排列
db.users.find().sort({ age: -1 })
#### 分页查询
# skip(n):跳过n条记录
# limit(m):返回m条记录

# 示例:查询第2页数据,每页2条
db.users.find().skip(2).limit(2)

4.3 更新文档

#### 更新单个文档
# 基本语法
db.集合名.updateOne(查询条件, 更新操作)

# 示例1:将张三的年龄更新为26($set 操作符用于设置字段值)
db.users.updateOne(
  { name: "张三" },
  { $set: { age: 26 } }
)

# 示例2:增加李四的年龄($inc 操作符用于自增)
db.users.updateOne(
  { name: "李四" },
  { $inc: { age: 1 } }  // 年龄+1
)
#### 更新多个文档
# 基本语法
db.集合名.updateMany(查询条件, 更新操作)

# 示例:将所有年龄小于26的用户增加一个字段
db.users.updateMany(
  { age: { $lt: 26 } },
  { $set: { isYoung: true } }
)
#### 替换文档
# 替换整个文档(_id 保持不变)
db.集合名.replaceOne(查询条件, 新文档)

# 示例
db.users.replaceOne(
  { name: "王五" },
  { name: "王五", age: 29, email: "newwangwu@example.com", hobbies: ["摄影"] }
)

4.4 删除文档

#### 删除单个文档
# 基本语法
db.集合名.deleteOne(查询条件)

# 示例:删除姓名为"张三"的第一个文档
db.users.deleteOne({ name: "张三" })
#### 删除多个文档
# 基本语法
db.集合名.deleteMany(查询条件)

# 示例:删除所有年龄大于30的用户
db.users.deleteMany({ age: { $gt: 30 } })

# 示例:删除集合中所有文档(保留集合结构)
db.users.deleteMany({})

五、总结

本文详细介绍了 MongoDB 的安装配置过程,以及数据库、集合、文档的核心操作指令。MongoDB 作为文档型数据库,其灵活的 schema 设计和丰富的查询能力使其在快速迭代的应用中具有显著优势。

掌握这些基础操作后,建议进一步学习:
- MongoDB 的索引优化策略
- 聚合管道(Aggregation Pipeline)的高级用法
- MongoDB 的事务处理
- 副本集和分片集群的部署(用于高可用和水平扩展)

通过不断实践,你将能充分发挥 MongoDB 在大数据量、高并发场景下的性能优势。


网站公告

今日签到

点亮在社区的每一天
去签到