MongoDB学习1—MongoDB简介
1. MongoDB介绍
1.1. 什么是MongoDB
MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统,旨在为WEB应用提供可扩展的高性能数据存储解决方案。它将数据存储为一个文档,数据结构由键值(key=>value)对组成,MongoDB文档类似于JSON对象,字段值可以包含其他文档,数组即文档数组。
1.2. 特点
MongoDB具有以下特点:
- 文档导向: MongoDB使用文档导向的数据模型,数据以文档的形式存储,类似于JSON对象。文档是一个键值对的集合,支持嵌套结构和动态模式。
- 灵活的模式: MongoDB是一个无模式(Schemaless)数据库,意味着不需要预定义模式和表结构。每个文档可以具有不同的字段和结构,这使得数据模型更加灵活,适用于各种类型的数据。
- 分布式存储: MongoDB可以在多个服务器上进行部署,实现数据的分布式存储和横向扩展。它支持副本集(Replica Set)和分片集群(Sharded Cluster),提供高可用性和可伸缩性。
- 丰富的查询语言: MongoDB提供了丰富的查询功能,支持灵活的条件查询、范围查询、正则表达式、聚合管道等。它还支持地理空间查询和文本搜索等特殊类型的查询。
- 支持事务: MongoDB从版本4.0开始支持事务,可以在单个文档或多个文档上执行原子性的读写操作。事务能够确保数据的一致性和完整性,适用于复杂的数据操作场景。
1.3. MongoDB的应用
MongoDB在许多应用场景中具有广泛的应用,以下是一些常见的MongoDB应用场景:
- 实时分析和大数据处理: MongoDB适用于实时数据分析和大数据处理场景。它可以存储和处理大量的非结构化或半结构化数据,支持高并发读写操作和复杂的聚合查询。这使得它成为处理实时数据、日志分析和数据挖掘等任务的理想选择。
- 内容管理系统(CMS): MongoDB可以用作内容管理系统的后端数据库。它的灵活的数据模型和无模式特性使得存储和管理各种类型的内容(如文章、页面、多媒体文件等)变得简单。此外,MongoDB的高性能和可扩展性能够满足CMS的需求。
- 物联网(IoT)应用: MongoDB适用于物联网应用,用于存储和处理大量的传感器数据和设备数据。它可以轻松地处理大规模的时间序列数据,支持地理空间查询和实时数据分析,使得物联网应用的数据管理和分析更加便捷。
- 实时应用和实时通信: MongoDB的低延迟和高吞吐量使其适用于实时应用和实时通信场景。它可以存储和处理实时产生的数据,如聊天消息、实时推送、实时游戏数据等。MongoDB的副本集和分片集群提供了高可用性和可伸缩性,确保实时应用的稳定性和性能。
- 目录和目标存储: MongoDB可以用作目录和目标存储,用于存储和管理大量的结构化和非结构化数据。它的灵活的数据模型和强大的查询功能使得存储和检索数据变得更高效和便捷。
- 用户数据和个性化推荐: MongoDB可以存储和管理用户数据,如用户配置、偏好设置、历史记录等。它可以用于个性化推荐系统,根据用户的行为和偏好提供个性化的推荐内容。
2. MongoDB安装和启动
windows下载地址:https://www.mongodb.com/try/download/community
下载完毕后,安装过程中,一路next就可以,如果不想放到C盘,在下面这一步选择想要存放的位置,其余的next就可以了。
安装完毕后,在MongoDB目录的bin目录下,执行mongod.exe文件,启动mongodb。
启动完毕后,可以访问http://localhost:27017,出现下面内容,说明启动成功
3. MongoDB概念
在MongoDB中,基本的概念是文档、集合、数据库,如下表所示:
| SQL术语概念 | MongoDB术语概念 | 解释 |
|---|---|---|
| database | database | 数据库 |
| table | collection | 数据库表/集合 |
| row | document | 数据库行/文档 |
| column | field | 数据库字段/域 |
| index | index | 索引 |
| table joins | 表连接,MongoDB不支持 | |
| primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
3.1. 数据库
一个mongodb中可以创建多个数据库,默认数据库为”db”,数据库的命名有以下要求:
1)不能是空字符串(“”)
2)不得含有’’(空格)、.、$、/、和\0(空字符)
3)应全部小写
4)最多64字节
有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库:
1)admin:从权限的角度来看,这生”root”数据库,要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限,一些特定的服务器端命令也智能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
2)local:这个数据永远不会被复制,可以用来存储于本地单台服务器的任何集合
3)config:当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
3.2. 文档(Document)
文档是一组键值(key-value)对,但MongoDB的文档不需要设置相同的字段,并且相同字段不需要相同的数据类型,这与关系型数据库有很大区别,也是MongoDB非常突出的特点。
需要注意的是:
- 文档中的键/值对是有序的。
- 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
- MongoDB区分类型和大小写。
- MongoDB的文档不能有重复的键。
- 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
3.3. 集合
集合就是MongoDB文档组,类似于RDBMS(关系数据库管理系统:Relational Database Management System)中的表格。
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据库都会有一定的关联性。
3.4. MongoDB数据类型:
下表是MongoDB中常用的数据类型:
| 数据类型 | 描述 |
|---|---|
| String | 字符串。 存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。 |
| Integer | 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。 |
| Boolean | 布尔值。用于存储布尔值(真/假)。 |
| Double | 双精度浮点值。用于存储浮点值。 |
| Min/Max keys | 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。 Array 用于将数组或列表或多个值存储为一个键。 |
| Timestamp | 时间戳。记录文档修改或添加的具体时间。 |
| Object | 用于内嵌文档。 |
| Null | 用于创建空值。 |
| Symbol | 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。 |
| Date | 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。 |
| Object ID | 对象 ID。用于创建文档的 ID。 |
| Binary Data | 二进制数据。 用于存储二进制数据。 |
| Code | 代码类型。用于在文档中存储 JavaScript 代码。 |
| Regular expression | 正则表达式类型。用于存储正则表达式。 |