揭开MongoDB的神秘面纱:从陌生到初识
目录
- 一、MongoDB 初印象
- 二、MongoDB 是什么
- 2.1 定义与特性
- 2.2 与传统关系型数据库的区别
- 三、MongoDB 核心概念
- 3.1 数据库
- 3.2 集合
- 3.3 文档
- 3.4 数据类型
- 四、MongoDB 的安装与配置
- 4.1 安装步骤
- 4.2 配置方法
- 4.3 启动与停止服务
- 五、MongoDB 基本操作
- 5.1 数据库操作
- 5.2 集合操作
- 5.3 文档操作
- 六、总结与展望
一、MongoDB 初印象
在当今数字化时代,数据如同企业的 “石油”,是驱动创新与发展的核心资源。而数据库作为存储和管理这些宝贵数据的关键工具,其重要性不言而喻。在众多数据库中,MongoDB 以其独特的魅力和强大的功能,在数据库领域占据了重要地位。根据权威的 DB-Engines 排名,MongoDB 长期稳居全球数据库排行榜前五名 ,是其中唯一的非关系型文档数据库,这足以证明其在开发者和企业中的受欢迎程度和广泛应用。
MongoDB 之所以备受青睐,源于其能够解决传统关系型数据库在面对某些复杂场景时的困境。例如,在电商行业,商品种类繁多,属性复杂多变,且订单数据量巨大。传统数据库在存储和处理这些数据时,往往需要复杂的表结构设计和大量的关联查询,导致开发和维护成本高昂。而 MongoDB 的出现,为这类场景提供了全新的解决方案。它采用灵活的文档存储方式,无需预先定义严格的表结构,能够轻松应对数据模型的动态变化。无论是简单的文本信息,还是复杂的嵌套对象和数组,MongoDB 都能高效存储和快速查询,极大地提高了开发效率和系统性能。
再比如在物联网(IoT)领域,数以亿计的设备不断产生海量的实时数据,这些数据不仅量大,而且格式多样,对数据库的读写性能和扩展性提出了极高的要求。MongoDB 凭借其出色的水平扩展能力和高并发处理性能,能够轻松应对 IoT 场景下的数据洪流,确保数据的实时存储和快速分析,为智能设备的稳定运行和数据分析提供了坚实的基础。
二、MongoDB 是什么
2.1 定义与特性
MongoDB 是一个基于分布式文件存储的开源数据库系统 ,属于 NoSQL(Not Only SQL)数据库家族。它采用了独特的文档型数据模型,数据以类似 JSON(JavaScript Object Notation)的 BSON(Binary JSON)格式存储,这种格式不仅能支持更丰富的数据类型,还能提高数据的存储和传输效率。与传统的关系型数据库不同,MongoDB 无需预先定义严格的表结构,具有 “模式自由”(Schema - Free)的特性,这使得数据的插入和更新操作更加灵活,特别适合处理数据结构不断变化的应用场景。
MongoDB 具备强大的扩展性,其内置的分片(Sharding)机制可以将数据自动分布到多个服务器节点上,实现水平扩展,从而轻松应对海量数据存储和高并发访问的需求。在高并发读写的场景下,MongoDB 能够保持出色的性能表现,通过多线程和异步 I/O 等技术,高效地处理大量的读写请求。此外,MongoDB 还支持数据复制(Replication),通过创建多个数据副本并分布在不同的节点上,确保了数据的高可用性和容错性,当某个节点出现故障时,系统可以自动切换到其他副本节点,保证服务的连续性。
2.2 与传统关系型数据库的区别
从数据模型来看,传统关系型数据库以表格形式存储数据,数据结构严谨,各字段类型和约束在创建表时就已确定。例如在 MySQL 数据库中创建一个用户表,需要明确指定每个字段的名称、数据类型以及是否允许为空等约束条件。而 MongoDB 采用文档模型,每个文档是一个独立的、自包含的数据单元,文档内部可以嵌套复杂的结构,如数组和子文档 ,不同文档的结构可以各不相同,无需遵循统一的模式。比如存储用户信息时,一个用户文档可以包含基本信息、联系方式、订单记录等多个嵌套结构,且不同用户文档可以根据实际情况增减字段。
查询语言方面,传统关系型数据库使用结构化查询语言 SQL 进行数据查询和操作。SQL 功能强大,语法严谨,支持复杂的连接(JOIN)操作、聚合函数(如 SUM、AVG 等)以及事务处理。例如使用 SQL 查询多个表中满足特定条件的数据时,可以通过 JOIN 操作关联多个表。MongoDB 则使用 JSON 风格的查询语法,这种语法更加直观和灵活,适合处理文档型数据。例如查询某个集合中特定条件的文档时,使用db.collection.find({条件})的方式即可,并且可以轻松查询嵌套文档和数组中的数据。
灵活性上,传统关系型数据库在数据结构变化时,修改表结构的操作通常较为繁琐,可能涉及到数据迁移、重建索引等复杂操作,对业务的影响较大。而 MongoDB 的 “模式自由” 特性使得它能够轻松适应数据结构的动态变化,应用程序可以随时向文档中添加或删除字段,无需对数据库结构进行大规模的修改。
在性能和扩展性方面,传统关系型数据库在处理大规模数据和高并发访问时,通常需要通过垂直扩展(增加硬件资源,如 CPU、内存、磁盘等)来提升性能,但这种方式存在一定的局限性,成本也较高。在高并发读写场景下,关系型数据库可能会因为锁机制等原因导致性能下降。MongoDB 则天生具备良好的水平扩展能力,通过分片技术可以将数据分布到多个节点上,实现分布式存储和处理,从而有效地提升系统的读写性能和扩展性,能够更好地应对海量数据和高并发的挑战。
三、MongoDB 核心概念
3.1 数据库
在 MongoDB 中,一个实例可以创建多个数据库,每个数据库都有自己独立的命名空间,用于存储相关的集合和文档,就好比一个大型图书馆中设有多个不同主题的藏书区域,每个区域可以存放不同类型的书籍。例如在一个电商系统中,可能会有一个数据库专门用于存储用户相关数据,另一个数据库用于存储商品信息。
MongoDB 安装完成后,会内置几个特殊的数据库。其中,test是默认数据库,当连接到 MongoDB 服务而未指定具体数据库时,默认会连接到test数据库 ,它常被用于测试和开发阶段,就像一个临时的实验场地,方便开发者进行各种测试操作。admin数据库是管理数据库,从权限角度看,它类似于 “root” 数据库,将用户添加到该数据库并赋予特定角色权限后,用户可继承所有数据库的权限,一些特定的服务器端命令,如关闭服务器等,也只能从这个数据库运行 ,它如同图书馆的管理办公室,拥有最高的管理权限。local数据库用于存储本地单台服务器的任意集合,并且其中的数据不会被复制到其他分片,一般不建议用户直接使用它来存储重要数据 ,可以将其看作是服务器的私人备忘录,仅供本地使用。config数据库在 MongoDB 使用分片设置时,用于保存分片的相关信息 ,类似于图书馆分馆之间的协调办公室,负责管理各个分馆(分片)的相关信息。
数据库名必须满足特定规则:不能是空字符串,不得含有空格、点(.)、美元符号($)、斜杠(/)、反斜杠(\)和空字符(\0),应全部小写,且最多 64 字节 。这是因为数据库名最终会映射为文件系统中的文件,这些限制确保了数据库名在文件系统中的合法性和唯一性,就像给书籍分类时,分类名称必须符合一定规范,才能准确地找到对应的书籍存放位置。
3.2 集合
集合是 MongoDB 中一组文档的集合,类似于关系数据库中的表,它是存储和组织相关文档的容器。例如在一个博客系统中,可能会有一个 “posts” 集合用于存储所有的文章文档,一个 “comments” 集合用于存储文章的评论文档。与关系数据库中的表不同,MongoDB 的集合没有固定结构,这意味着在同一个集合中可以存储结构不同的文档。比如在 “posts” 集合中,一篇文章文档可能包含标题、作者、内容、发布时间等字段,而另一篇文章文档除了这些基本字段外,还可以包含图片链接、视频链接等额外字段,无需像关系型数据库那样预先定义严格的表结构。
集合不需要事先创建,当第一个文档插入或者第一个索引创建时,如果该集合不存在,则会自动创建一个新的集合 。这就好比在一个仓库中,当有第一批货物(文档)存放时,会自动创建一个对应的货架区域(集合)来放置这些货物。集合名也有一定的命名规则:不能是空字符串,不能含有空字符(\0),因为空字符表示集合名的结尾;不能以 “system.” 开头,这是为系统集合保留的前缀,例如 “system.users” 集合用于保存数据库的用户信息 ;集合名必须以下划线或者字母符号开始,并且不能包含 “$” 符号 。这些规则保证了集合名的规范性和唯一性,便于系统对集合进行管理和识别。
3.3 文档
文档是 MongoDB 存储数据的核心单元,以键值对的形式存储,采用 BSON(Binary JSON)格式,这种格式类似于 JSON,但具有更高的存储和传输效率。每个文档都可以看作是一个独立的信息单元,包含了相关数据的各个属性和对应的值。例如在一个用户信息集合中,一个用户文档可能如下所示:
{"_id": ObjectId("64c99a2562059a751782a769"),"name": "张三","age": 25,"email": "zhangsan@example.com","address": {"city": "北京","street": "中关村大街","zipcode": "100080"},"hobbies": ["阅读", "跑步", "旅游"]
}
在这个文档中,“_id” 是文档的唯一标识符,类似于关系数据库中的主键,由 MongoDB 自动生成(也可以自定义,但通常建议使用自动生成的 ObjectId),它保证了每个文档在集合中的唯一性。其他键如 “name”“age”“email” 等分别对应了用户的不同属性,其值则表示具体的属性值。“address” 是一个嵌套文档,用于存储用户地址的详细信息,“hobbies” 是一个数组,用于存储用户的多个爱好。
文档具有高度的灵活性,可以包含不同类型的数据,如字符串、数字、布尔值、数组、嵌套文档等,能够轻松表达复杂的数据结构。并且文档中的键 / 值对是有序的,这与 JSON 的无序性有所不同,在某些需要依赖顺序的场景下,这种有序性能够提供更准确的数据表达。键的命名也有一些规范,不能以 “(”开头,因为“)” 在 MongoDB 中有特殊含义,常用于操作符;不能包含点(.),因为点在查询和更新操作中有特殊用途;区分大小写,例如 “name” 和 “Name” 是两个不同的键 。这些规范确保了文档结构的清晰和操作的准确性,使得开发者能够高效地对文档进行管理和查询。
3.4 数据类型
MongoDB 支持丰富的数据类型,以满足各种数据存储需求。常见的数据类型包括:
- 字符串(String):用于存储文本数据,采用 UTF - 8 编码,是存储文本和符号的常用类型,比如用户的姓名、地址、描述等都可以用字符串类型存储,如 “张三”“北京市海淀区”。
- 整型(Int32 和 Int64):Int32 表示 32 位有符号整数,Int64 表示 64 位有符号整数,用于存储整数类型的数据,像用户的年龄、商品的数量等都可以用整型表示,如 25(Int32)、1000000000000(Int64)。在 MongoDB shell 中,可以使用NumberInt类来明确指定一个整数为 32 位,使用NumberLong类来明确指定为 64 位。
- 布尔值(Boolean):只有true和false两个值,用于存储逻辑判断结果,比如用户是否激活、订单是否支付成功等场景,如{“isActive”: true}表示用户处于激活状态。
- 双精度浮点值(Double):64 位浮点数,用于存储小数和非常大的数字,是 MongoDB 中默认的数值类型,如商品的价格 3.14、圆周率 3.1415926 等可以用双精度浮点值表示。
- 日期(Date):使用 UTC 时间存储日期和时间,以毫秒自纪元(UNIX 纪元,即 1970 年 1 月 1 日)以来的时间存储,可以使用 JavaScript 的Date对象来创建日期类型的数据,常用于记录用户的注册时间、订单的创建时间等,如new Date(“2024-10-01T12:00:00Z”)表示 2024 年 10 月 1 日 12 点整。
- 数组(Array):用于存储一组值,数组中的元素可以是任何数据类型,包括其他数组或文档,比如用户的多个爱好、商品的多个标签等可以用数组存储,如[“阅读”, “跑步”, “旅游”]。
- 嵌套文档(Embedded Document):用于存储一个 JSON 对象,能够表达复杂的数据结构,如用户的详细地址信息可以作为一个嵌套文档嵌入到用户文档中,像上面示例中的 “address” 字段。
- 对象 ID(ObjectId):12 字节的唯一标识符,用于唯一标识文档,默认是 “_id” 字段的值,由时间戳、机器标识符、进程 ID 和计数器组成,确保了在分布式系统中的唯一性。
- 空值(Null):表示没有值或空值,如{“address”: null}表示地址信息为空。
- 正则表达式(Regex):用于存储正则表达式,在进行文本匹配和搜索时非常有用,如{“pattern”: /mongodb.*/}表示匹配以 “mongodb” 开头的字符串。
- 二进制数据(Binary Data):用于存储图像、文件等二进制内容,比如用户上传的头像图片、文档文件等可以以二进制数据的形式存储。
四、MongoDB 的安装与配置
4.1 安装步骤
- Windows 系统:
- 前往 MongoDB 官网(https://www.mongodb.com/try/download/community )下载适合 Windows 系统的 MongoDB 社区版安装包,根据系统版本选择 32 位或 64 位的安装程序 ,生产环境建议使用 64 位版本。
- 下载完成后,双击运行.msi 安装文件。在安装向导的启动界面,点击 “Next”。
- 阅读并接受最终用户许可协议,然后点击 “Next”。
- 选择安装类型,若想更改安装位置或选择安装选择性组件,可点击 “Custom” 进行自定义安装;若想快速安装所有组件,可点击 “Complete”。这里以自定义安装为例,点击 “Custom”,然后在弹出的界面中选择安装路径,比如将其安装在 “D:\MongoDB” 目录下,再点击 “Next”。
- 在 “Service Configuration” 步骤中,可选择 “以网络服务用户身份运行服务”,并记下数据目录(默认为 “C:\data\db”,可自行修改),后续使用中可能会用到 。若要安装为 Windows 服务,还可勾选 “Install MongoDB Compass”(图形界面管理工具,可根据需求选择是否安装,文件较大,下载可能较慢) ,点击 “Next”。
- 点击 “Install” 按钮开始安装,安装完成后点击 “Finish” 完成安装。
另外,也可以通过下载 zip 包的方式安装 MongoDB:
1. 从官网下载 zip 格式的安装包,解压到指定的安装目录,如 “D:\MongoDB”。
2. 在安装目录下创建 “data” 文件夹作为数据库目录,创建 “log” 文件夹作为日志目录 。
3. 配置系统环境变量,将 “D:\MongoDB\bin” 目录添加到系统的 “Path” 变量中,这样就可以在任意命令行位置执行 MongoDB 的命令。
4. 以管理员身份打开 cmd 命令窗口,执行以下命令启动 MongoDB 并注册为系统服务:
mongod --logpath D:\MongoDB\log\mongodb.log --logappend --dbpath D:\MongoDB\data --directoryperdb --serviceName "MongoDB" --install
- Mac 系统:
- 从 MongoDB 官网(https://www.mongodb.com/try/download/community )下载适合 Mac 系统的安装包,建议选择较稳定的版本,如 5.0 版本。
- 将下载好的包解压后,修改解压后的文件夹名称为 “mongodb”,然后将其移动到 “/usr/local” 目录下。
- 打开终端,输入 “open ~/.bash_profile” 打开.bash_profile 文件,添加变量 “export PATH=${PATH}:/usr/local/mongodb/bin”,保存并退出,然后在终端输入 “source ~/.bash_profile” 使配置生效。
- 在 “mongodb” 文件下创建 “data” 文件夹用来存放数据,创建 “log” 文件夹用来存放日志,在终端输入 “mkdir data log” 即可创建。
- 为 “data” 和 “log” 添加权限,例如当前用户名为 “rose”,则在终端输入 “sudo chown rose /usr/local/mongodb/data” 和 “sudo chown rose /usr/local/mongodb/log”。
- 还可以使用 brew 进行安装,在终端输入以下命令:
brew tap mongodb/brew
brew install mongodb-community@4.4
- Linux 系统(以 CentOS 7 为例):
- 首先停止防火墙,在终端输入以下命令:
systemctl status firewalld #查看firewall状态
systemctl stop firewalld #停止firewall
systemctl disable firewalld #禁止firewall开机启动
reboot #重启系统使设置生效
2. 设置服务器 IP 映射服务器名,先查看主机名,在终端输入 “hostname”,然后编辑 “/etc/hosts” 文件,添加 “服务器公网 ip 主机名”,如 “124.223.176.49 VM-16-9-centos” 。
3. 前往 MongoDB 官网([https://www.mongodb.com/try/download/community](https://www.mongodb.com/try/download/community) )下载 MongoDB Community Server(社区版)的安装包,下载完成后,在 “soft” 文件夹下创建 “mongodb” 文件夹,用于存放上传的安装包,在终端输入 “mkdir /soft/mongodb” 。
4. 将下载的安装包上传到 “/soft/mongodb” 目录下,然后解压安装包,在终端输入以下命令:
cd /soft/mongodb
tar -zxvf mongodb-linux-x86_64-rhel70-4.4.15.tgz #解压安装包,版本号根据实际下载的填写
mv mongodb-linux-x86_64-rhel70-4.4.15 mongodb #重命名解压后的包名称为mongodb
mkdir -p /soft/mongodb/mongodb/data /soft/mongodb/mongodb/log /soft/mongodb/mongodb/conf #创建数据目录、日志目录和配置文件目录
4.2 配置方法
- Windows 系统:
- 安装版配置文件位置:安装版的 MongoDB 配置文件默认路径为 “C:\Program Files\MongoDB\Server\ 版本号 \bin\mongod.cfg” 。若使用 zip 包安装,配置文件路径为 “C:\ProgramData\MongoDB\Server\ 版本号 \mongod.cfg” 。
- 常见配置项:打开配置文件,常见配置项如下:
- 端口绑定(net.port):默认端口是 27017,可根据需求修改,如将端口改为 27018,可在配置文件中添加 “net:port: 27018” 。
- 日志配置(systemLog):通过 “systemLog.destination” 指定日志输出目标,如 “file” 表示输出到文件;“systemLog.path” 指定日志文件路径,如 “C:\MongoDB\log\mongod.log”;“systemLog.logAppend” 设置为 “true” 表示以追加模式记录日志。
- 数据目录设置(storage.dbPath):默认数据目录为 “C:\data\db”,若要修改,可设置 “storage:dbPath: D:\MongoDB\data”。
- Mac 系统:
- 配置文件位置:配置文件默认路径为 “/usr/local/etc/mongod.conf” 。
常见配置项:- 数据库路径(dbpath):设置为 “/usr/local/mongodb/data” 。
- 日志输出文件路径(logpath):设置为 “/usr/local/mongodb/log/mongo.log”。
- 错误日志采用追加模式(logappend):设置为 “true” 。
- 启用日志文件(journal):默认启用,可设置为 “true” 或 “false” 。
- 过滤无用日志信息(quiet):若需要调试设置为 “false”,默认可设置为 “true” 。
- 端口号(port):默认为 27017,可根据需要修改 。
- 配置文件位置:配置文件默认路径为 “/usr/local/etc/mongod.conf” 。
- Linux 系统:
- 配置文件位置:配置文件默认路径为 “/etc/mongod.conf”,也可自定义配置文件路径。
- 常见配置项:
- systemLog:
- destination:指定日志输出目标为文件,设置为 “file”。
- path:指定日志文件路径,如 “/soft/mongodb/mongodb/log/mongod.log”。
- logAppend:设置为 “true”,表示以追加模式记录日志。
- storage:
- dbPath:指定数据库路径,如 “/soft/mongodb/mongodb/data”。
- engine:指定存储引擎,如 “wiredTiger”。
- journal:设置为 “true”,启用持久性日志以确保数据文件保持有效和可恢复。
- net:
- bindIp:绑定服务 IP,如 “0.0.0.0” 表示允许所有 IP 访问,若绑定 “127.0.0.1”,则只能本机访问。
- port:指定端口号,默认为 27017。
- processManagement:设置 “fork: true”,启用在后台运行 mongod 进程的守护进程模式。
- systemLog:
4.3 启动与停止服务
- Windows 系统:
- 启动服务:以管理员身份打开命令提示符,输入 “net start MongoDB”(若安装时指定了不同的服务名称,需将 “MongoDB” 替换为实际的服务名称) ,或者在 “C:\Program Files\MongoDB\Server\ 版本号 \bin” 目录下,双击 “mongod.exe” 文件启动服务。
- 停止服务:在命令提示符中输入 “net stop MongoDB”。
- Mac 系统:
- 启动服务:在终端输入 “mongod --config /usr/local/etc/mongod.conf”(若配置文件路径不同,需修改为实际路径),或者使用之前设置的命令 “mongod --fork -dbpath data --logpath log/mongo.log --logappend”。
- 停止服务:先在终端输入 “mongo” 进入 MongoDB 控制台,然后输入 “use admin”,再输入 “db.shutdownServer ()”。
- Linux 系统:
- 启动服务:输入 “sudo systemctl start mongod” 。若使用配置文件启动,可输入 “mongod -f /soft/mongodb/mongodb/conf/mongo.conf”(根据实际配置文件路径修改)。
- 停止服务:输入 “sudo systemctl stop mongod” 。若 MongoDB 服务没有响应 “systemctl stop” 命令,可使用 “sudo kill -9 $(pgrep mongod)” 强制停止服务,但此方法可能会导致数据丢失或损坏,需谨慎使用。
五、MongoDB 基本操作
5.1 数据库操作
- 创建数据库:在 MongoDB 中,使用use命令来创建或切换数据库。如果指定的数据库不存在,MongoDB 会在首次插入数据时自动创建它 。例如,要创建一个名为my_database的数据库,只需在 MongoDB shell 中输入:
use my_database
执行上述命令后,如果my_database不存在,系统不会给出明确的创建成功提示,但当向该数据库插入数据时,数据库就会被真正创建。
- 切换数据库:同样使用use命令进行数据库切换。比如从当前数据库切换到test数据库,输入:
use test
执行后,后续的数据库操作都会在test数据库上进行。
- 显示数据库:使用show dbs或show databases命令可以查看当前 MongoDB 实例中所有的数据库列表 。执行命令后,会列出所有有权限查看的数据库及其占用空间大小 ,例如:
show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
- 删除数据库:删除数据库使用dropDatabase()方法,该方法会删除当前选定的数据库。在删除之前,需要先使用use命令切换到要删除的数据库 。例如,要删除my_database数据库,操作如下:
use my_database
db.dropDatabase()
执行db.dropDatabase()后,如果数据库删除成功,会返回一个包含dropped和ok字段的文档,如{ “dropped” : “my_database”, “ok” : 1 } ,表示my_database数据库已被成功删除。
5.2 集合操作
- 创建集合:创建集合有显式和隐式两种方式。显式创建使用createCollection()方法,语法为db.createCollection(name, options),其中name是要创建的集合名称,options是可选参数,用于指定集合的配置,如最大大小、文档验证规则等 。例如,创建一个名为students的普通集合,可执行:
db.createCollection("students")
如果需要设置额外选项,比如创建一个固定大小为 100000 字节的employees集合,可以这样操作:
db.createCollection("employees", { capped: true, size: 100000 })
隐式创建集合则是在向一个不存在的集合插入文档时,MongoDB 会自动创建该集合。例如:
db.newCollection.insert({ name: "John Doe", age: 30 })
如果newCollection集合不存在,上述插入操作会自动创建它。
- 显示集合:使用show collections或show tables命令可以查看当前数据库中的所有集合 。例如,在test数据库中查看集合,执行:
use test
show collections
执行后会列出test数据库中的所有集合名称。
- 删除集合:删除集合使用drop()方法,语法为db.collection.drop() 。例如,要删除students集合,操作如下:
db.students.drop()
如果集合删除成功,drop()方法会返回true,否则返回false。
5.3 文档操作
- 插入文档:插入文档可以使用insert()、insertOne()或insertMany()方法。insert()方法既可以插入单个文档,也可以插入文档数组 。例如,向students集合插入一个学生文档:
db.students.insert({ name: "Alice", age: 20, major: "Computer Science" })
插入多个文档时,可以这样写:
db.students.insert([{ name: "Bob", age: 21, major: "Mathematics" },{ name: "Charlie", age: 19, major: "Physics" }
])
insertOne()方法用于插入单个文档,它返回一个包含acknowledged和insertedId字段的结果对象 ,例如:
db.students.insertOne({ name: "David", age: 22, major: "Biology" })
insertMany()方法用于插入多个文档,返回的结果对象包含acknowledged和insertedIds字段 ,例如:
db.students.insertMany([{ name: "Eve", age: 20, major: "Chemistry" },{ name: "Frank", age: 23, major: "History" }
])
- 查询文档:使用find()方法查询集合中的文档。查询所有文档,直接使用find()方法即可,例如:
db.students.find()
上述命令会返回students集合中的所有文档。如果要查询满足特定条件的文档,可以在find()方法中传入查询条件 。例如,查询年龄大于 20 岁的学生:
db.students.find({ age: { $gt: 20 } })
这里$gt是比较操作符,表示 “大于” 。还可以使用其他比较操作符,如$lt(小于)、$gte(大于等于)、$lte(小于等于)、$ne(不等于)等。
MongoDB 还支持复杂的查询,如使用$and操作符查询多个条件同时满足的文档,使用$or操作符查询满足多个条件中任意一个的文档 。例如,查询年龄大于 20 岁且专业为 “Computer Science” 的学生:
db.students.find({ $and: [{ age: { $gt: 20 } }, { major: "Computer Science" }] })
查询年龄大于 20 岁或者专业为 “Mathematics” 的学生:
db.students.find({ $or: [{ age: { $gt: 20 } }, { major: "Mathematics" }] })
- 更新文档:使用update()、updateOne()或updateMany()方法更新文档。update()方法可以更新单个或多个文档,语法为db.collection.update(criteria, objNew, upsert, multi) ,其中criteria是查询条件,objNew是要更新的内容,upsert表示如果文档不存在是否插入新文档(取值为true或false),multi表示是否更新多个文档(取值为true或false,默认只更新第一个匹配的文档) 。例如,将students集合中名为 “Alice” 的学生年龄更新为 21 岁:
db.students.update({ name: "Alice" }, { $set: { age: 21 } })
这里$set操作符用于指定要更新的字段和值 。如果要更新多个匹配的文档,可以将multi参数设置为true 。
updateOne()方法用于更新单个文档,它只会更新第一个匹配的文档 ,例如:
db.students.updateOne({ name: "Bob" }, { $set: { major: "Applied Mathematics" } })
updateMany()方法用于更新多个文档,例如,将students集合中所有年龄大于 20 岁的学生的年龄加 1:
db.students.updateMany({ age: { $gt: 20 } }, { $inc: { age: 1 } })
这里$inc操作符用于对指定字段的值进行增减操作。
- 删除文档:使用deleteOne()或deleteMany()方法删除文档。deleteOne()方法用于删除单个文档,例如,删除students集合中名为 “Charlie” 的学生文档:
db.students.deleteOne({ name: "Charlie" })
deleteMany()方法用于删除多个文档,例如,删除students集合中所有年龄小于 18 岁的学生文档:
db.students.deleteMany({ age: { $lt: 18 } })
六、总结与展望
通过本文,我们一同踏入了 MongoDB 这个充满魅力的数据库世界。从它在当今数据驱动时代的重要地位,到它独特的定义、特性以及与传统关系型数据库的显著区别,我们逐步揭开了 MongoDB 的神秘面纱。深入了解了 MongoDB 的核心概念,包括数据库、集合、文档和丰富的数据类型,掌握了在不同操作系统上的安装、配置以及启动和停止服务的方法,还学会了进行数据库、集合和文档的基本操作。
MongoDB 以其灵活的文档存储、出色的扩展性和高并发处理能力,在众多领域展现出强大的优势,为现代应用开发提供了高效的数据存储和管理解决方案。然而,这仅仅是 MongoDB 的冰山一角,它还有更多强大的功能等待我们去探索。例如,在索引优化方面,通过合理创建单字段索引、复合索引等,可以极大地提升查询性能;聚合操作能帮助我们对数据进行复杂的分析和处理,挖掘数据背后的价值;在集群部署方面,复制集和分片集群能实现高可用性和水平扩展,满足大规模数据存储和高并发访问的需求。
如果你渴望进一步深入学习 MongoDB,建议阅读 MongoDB 官方文档,它是最权威、最全面的学习资料,涵盖了 MongoDB 的各个方面,从基础概念到高级特性,从操作指南到最佳实践,都有详细的介绍 。同时,也可以参考《MongoDB 实战》《MongoDB 权威指南》等经典书籍,这些书籍通过丰富的案例和深入的讲解,能帮助你更好地理解和运用 MongoDB 。此外,参与 MongoDB 社区,与其他开发者交流经验、分享心得,也是快速提升的有效途径。
在后续的学习中,你可以深入研究索引的创建和优化策略,根据不同的查询需求选择合适的索引类型;学习如何使用聚合管道进行复杂的数据统计和分析,实现数据的价值挖掘;探索复制集和分片集群的原理与搭建方法,了解如何构建高可用、可扩展的数据库集群 。希望你在 MongoDB 的学习之旅中不断进步,收获满满,将 MongoDB 的强大功能运用到实际项目中,创造出更优秀的应用。