当前位置: 首页 > 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.dtcms.com/a/337388.html

相关文章:

  • STM32学习笔记14-I2C硬件控制
  • 【音视频】瑞芯微、全志芯片在运动相机和行车记录仪产品分析
  • keil错误:Error: failed to execute ‘D:\Keil\C51\BIN\BIN\A51.EXE‘
  • MongoDB 查询方法与高级查询表(Python版)
  • Redis 客户端接口介绍
  • 微信小程序通过uni.chooseLocation打开地图选择位置,相关设置及可能出现的问题
  • Apache Shiro550 漏洞(CVE-2016-4437):原理剖析与实战 SOP
  • 【Linux开发】错误更改bash.sh导致PATH环境变量被破坏所有命令不可用的解决方法
  • 【Axure高保真原型】时间轴缩放面积图
  • CMIP6 气候模式核心特性解析
  • 学习游戏制作记录(各种独特物品效果)8.18
  • 代码随想录-数组练习
  • 矿物识别案例(数据处理:六种填充方法)
  • 深度剖析PyTorch分布式训练:从原理到工程实践
  • Centos7使用lamp架构部署wordpress
  • 安全基础DAY6-服务器安全检测和防御技术
  • 网站服务器使用免费SSL证书安全吗?
  • 计算机网络技术学习-day3《交换机配置》
  • ⭐CVPR2025 RigGS:从 2D 视频到可编辑 3D 关节物体的建模新范式
  • 一个基于前端开发的经典飞机大战游戏,具有现代化的UI设计和流畅的游戏体验。
  • OpenAL技术详解:跨平台3D音频API的设计与实践
  • 飞机起落架轮轴深孔中间段电解扩孔内轮廓检测 - 激光频率梳 3D 轮廓检测
  • 【verge3d】如何在项目里调用接口
  • Gateway中Forward配置+源码观赏
  • Pandas 核心数据结构详解(精简版)
  • Drawnix:一款免费开源的白板工具,支持思维导图、流程图、类图和手绘图
  • mybatisplus oracle 数据库OracleKeyGenerator使用序列生成主键原理
  • Redis-缓存-穿透-布隆过滤器
  • Linux 系统(如 Ubuntu / CentOS)阿里云虚拟机(ECS)上部署 Bitnami LAMP
  • 用随机森林填补缺失值:原理、实现与实战