走进MongoDB

166 阅读8分钟

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

d0ac996b2e5b8355ac7a26ad146eea47_crud-annotated-document.png

MongoDB特点

  • 一个面向文档存储的数据库,操作起来比较简单和容易。

  • 可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。

  • 通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。

  • 负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。

  • 支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。

    • 不仅支持大部分关系型数据库中的单表查询,还支持范围查询、排序、聚合、MapReduce 等
    • MongoDB 的查询语法类似于面相对象的程序语言
  • 高性能:支持使用嵌入数据时,减少系统I/O负担,支持子文档查询

  • 多种存储引擎:WiredTiger , In-Memory

应用场景

  1. 要处理大量的低价值数据,且对数据处理性能有较高要求
    • 数据的处理就不需要太高的事务性,但是对数据的存取性能有很高的要求,这时就非常适合使用。
  2. 需要借助缓存层来处理数据
    • MongoDB 能高效的处理数据,所以非常适合作为缓存层来使用。将 MongoDB 作为持久化缓存层,可以避免底层存储的资源过载。
  3. 需要高度的伸缩性
    • 相比关系型数据库而言,当表的大小达到一定数量级后,其性能会急剧下降。这时可以使用多台 MongoDB 服务器搭建一个集群环境,实现最大程度的扩展,且不影响性能。

MongoDB安装

参考文档:www.mongodb.com/docs/manual…

注意

  • MongoDB 版本形式为 X.Y.Z,例如 4.4.2
  • 如果 Y 是奇数(例如 4.3),则为开发版,建议开发测试使用
  • 如果 Y 是偶数(例如 4.4),则为稳定版,建议生产环境使用
  • 版本 3.2 之后不再支持 32 位操作系统

安装

Windows 手动手动安装 MongoDB。

下载安装包

image.png

  • 如果是.zip的包,解压压缩包,将解压出来的资源文件放到一个稳定的目录中
    • MongoDB 软件包bin目录文件
    • mongod.exe 服务端,用来启动数据库服务的
    • mongo.exe 客户端,用来连接数据库服务操作数据库 image.png

运行安装包

image.png

image.png

image.png 上图选择安装方式:

  • Complete:完整安装
  • Custom:自定义安装

这里选择 Complete 完整安装。

image.png

从 MongoDB 4.0 开始,可以在安装过程中将 MongoDB 设置为 Windows 服务,也可以仅安装二进制文件。

Service Name:服务名称

Data Directory:数据存储位置

Log Directory:日期存储位置

image.png

MongoDB Compass 是 MongoDB 官网提供的一个集创建数据库、管理集合和文档、运行临时查询、评估和优化查询、性能图表、构建地理查询等功能为一体的MongoDB可视化管理工具。

这里不勾选安装。如果需要,可以单独去官网下载安装。

image.png

image.png

image.png

安装结束啦。

MongoDB 服务

作为 Windows 服务的启动和停止

如果安装过程中将 MongoDB 安装为 Windows 的服务了,则 MongoDB 已经自动启动了,并且默认会开启启动。

查看

  • 打开 Windows 服务控制台

    • 输入Window+R ,打开运行,输入 services.msc 打开。
  • 可设置MongoDB服务状态:启动、停止、暂停、恢复、重新启动

image.png

命令方式启动和停止

没有把 MongoDB 安装 Windows 服务。

  • 将 MongoDB 安装目录中的 bin 目录配置到系统 PATH 环境变量。
    • 为了能够在命令行中的任何位置都能够访问到 bin 目录中的可执行程序。

image.png

image.png

image.png

image.png

image.png

  • 确认是否配置成功
    • 打开命令行窗口,输入mongod --version
    • 如下图

image.png

创建数据存储目录

MongoDB 的默认数据目录路径是启动 MongoDB 的驱动器上的绝对路径 \data\db

  • 启动 MongoDB 服务:mongod

    • --dbpath 选项用来指定数据存储目录,默认使用 MongoDB 程序所在驱动器上的绝对路径 \data\db
    • mongod --dbpath="数据存储目录路径"
    • mongod 默认监听 127.0.0.1:27017
    • 如果单独执行 mongod,它会默认使用执行 mongod 命令所处磁盘根目录/data/db 作为数据存储目录。

MongoDB概念

数据存储结构

MongoDB 是文档型数据库,其中存储的数据就是熟悉的 JSON 格式数据。

  • 可以把 MongoDB 数据库想象为一个超级大对象。
  • 对象里面有不同的集合。
  • 集合中有不同的文档。
{
  // 数据库 Database
  "Database1": {
    // 集合 Collection,对应关系型数据库中的 Table
    "Collection1": [
      // 文档 Document,对应关系型数据库中的 Row
      {
        // 数据字段 Field,对应关系数据库中的 Column
        "id": 1,
        "username": "张三",
        "password": "123"
      },
      {
        "id": 2,
        "username": "李四",
        "password": "456"
      }
      // ...
    ],
    "Collection2": [
      {
        "id": 1,
        "name": "iPhone Pro Max",
        "price": 100
      },
      {
        "id": 2,
        "name": "iPad Pro",
        "price": 80
      }
    ],
    "Collection3": []
    // ...
  },

  // 数据库
  "Database2": {}

  // ...
}

数据库

一个MongoDB中可以建立多个数据库。

数据库包含一个或多个文档集合。

都有自己的集合和权限,不同的数据库也放置在不同的文件中。

查看数据库列表

show dbs

image.png

查看当前数据库

image.png

MongoDB 中默认的数据库为 test,如果没有创建新的数据库,集合将存放在 test 数据库中。

有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。

  • admin:从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
  • local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
  • config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

创建/切换数据库

use <DATABASE_NAME>

MongoDB 中数据库只有真正的有了数据才会被创建出来。

可以切换到不存在的数据库。首次将数据存储在数据库中(例如通过创建集合)时,MongoDB 会创建数据库。

名称规则

  • 不区分大小写,但是建议全部小写
  • 不能包含空字符。
  • 数据库名称不能为空,并且必须少于64个字符。
  • Windows 上的命名限制
    • 不能包括 /. "$*<>:|? 中的任何内容
  • Unix 和 Linux 上的命名限制
    • 不能包括 /. "$ 中的任何字符

删除数据库

1、使用 use 命令切换到要删除的数据库

2、使用 db.dropDatabase() 删除当前数据库

集合

集合类似于关系数据库中的表,MongoDB 将文档存储在集合中。

0179ad5f76fedd103aebaf531d837253_1604488927220-2f3363e6-dc7a-4103-b745-895aa19b3af5.svg 集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

集合名称规则

集合名称应以下划线或字母字符开头,并且:

  • 不能包含 $
  • 不能为空字符串
  • 不能包含空字符
  • 不能以 . 开头
  • 长度限制
    • 版本 4.2 最大 120 个字节
    • 版本 4.4 最大 255 个字节

创建集合

如果不存在集合,则在第一次为该集合存储数据时,MongoDB 会创建该集合。

db.myCollection.insert( { name: "lisi" } )

MongoDB提供 db.createCollection() 方法来显式创建具有各种选项的集合,例如设置最大大小或文档验证规则。如果未指定这些选项,则无需显式创建集合,因为在首次存储集合数据时,MongoDB 会创建新集合。

查看集合

show collections

删除集合

db.集合名称.drop()

文档

文档是一组键值(key-value)对(即 BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

文档结构

由字段和值对组成,并具有以下结构:

{
   field1: value1,
   field2: value2,
   field3: value3,
   ...
   fieldN: valueN
}

字段名称

文档对字段名称有以下限制:

  • 字段名称 _id 保留用作主键;它的值在集合中必须是唯一的,不可变的,并且可以是数组以外的任何类型。
  • 字段名称不能包含空字符。
  • 顶级字段名称不能以美元符号 $ 开头。
    • 从 MongoDB 3.6 开始,服务器允许存储包含点 . 和美元符号 $ 的字段名称

数据类型

字段的值可以是任何 BSON 数据类型,包括其他文档,数组和文档数组。例如,以下文档包含各种类型的值:

{
    _id: ObjectId("5099803df3f4948bd2f98391"),
    name: { first: "Alan", last: "Turing" },
    birth: new Date('Jun 23, 1912'),
    death: new Date('Jun 07, 1954'),
    contribs: [ "Turing machine", "Turing test", "Turingery" ],
    views : NumberLong(1250000)
}

上面的字段具有以下数据类型:

  • _id 保存一个 ObjectId 类型
  • name 包含一个嵌入式文档,该文档包含 first 和 last 字段
  • birth 和 death 持有 Date 类型的值
  • contribs 保存一个字符串数组
  • views 拥有 NumberLong 类型的值

MongoDB 中,存储在集合中的每个文档都需要一个唯一的 _id 字段作为主键。如果插入的文档省略 _id 字段,则 MongoDB 驱动程序会自动为 _id 字段生成 ObjectId

_id 字段具有以下行为和约束:

  • 默认情况下,MongoDB 在创建集合时会在 _id 字段上创建唯一索引。
  • _id 字段始终是文档中的第一个字段
  • _id 字段可以包含任何 BSON 数据类型的值,而不是数组。