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

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

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 在大数据量、高并发场景下的性能优势。

http://www.lryc.cn/news/625149.html

相关文章:

  • 计算机组成原理(9) - 整数的乘除法运算
  • 抽象类和接口的区别
  • VLN视觉语言导航(3)——神经网络的构建和优化 2.3
  • qsort函数使用及其模拟实现
  • Android Cutout(屏幕挖孔)详解
  • SpringBoot--Spring MVC 拦截器注入与 new 的区别
  • gdb的load命令和传给opeocd的monitor flash write_image erase命令的区别
  • 优秀开发者的重要认知能力无法被AI替代
  • 在win10/11下Node.js安装配置教程
  • Ai Agent 项目
  • 项目延期的主要原因分析,以及应对策略
  • 摔倒检测数据集:1w+图像,yolo标注
  • 深度学习-计算机视觉-微调 Fine-tune
  • 【完整源码+数据集+部署教程】织物缺陷检测系统源码和数据集:改进yolo11-RevCol
  • STL库——string(类函数学习)
  • steal tsoding‘s pastebeam code as go server
  • CMake指令:查找文件(find_file)、查找目录(find_path)、查找库文件(find_library)
  • npm设置了镜像 pnpm还需要设置镜像吗
  • Esp32基础(③旋转编码器)
  • wait / notify、单例模式
  • 在openEuler系统中如何查看文件夹下每个文件的大小
  • AVB(Android Verified Boot)中vbmeta结构浅析
  • C/C++ 中 str、str、*str 在指针语境下的具体含义(以 char* str 为例):
  • Android输入框文字不垂直居中
  • Linux下的软件编程——IPC机制
  • Java发送企业微信通知
  • Vue2篇——第五章 Vue.js 自定义指令与插槽核心
  • (第十八期)图像标签的三个常用属性:width、height、border
  • minio安装和配置
  • 【DL学习笔记】交叉熵损失函数详解