NoSQL 之 MongoDB - 02 MongoDB Server 安装、MongoDB Shell、基础概念、可视化工具

安装 MongoDB Server

建议参考官方网站的安装教程:Install MongoDB — MongoDB Manual

本文以 Community Edition 社区版为例

安装方式

  • 在 Linux 中安装 MongoDB

    • 方式1:使用 Linux 发行版中的包管理器安装,例如 CentOS Linux 中的 yum、Ubuntu 中的 apt

    • 方式2:下载安装包手动安装

  • 在 macOS 中安装 MongoDB

    • 方式1:使用 Homebrew 包管理器安装管理 MongoDB 服务

    • 方式2:下载安装包手动安装

  • 在 Windows 中安装 MongoDB

    • 方式1:使用 .msi 安装程序快速安装

    • 方式2:下载安装包手动安装

从学习角度考虑建议下载安装包手动安装的方式,这样就可以知道更多的细节。

下面以 Windows 系统上下载安装包手动安装的方式演示安装过程。

注意事项

  • 关于 MongoDB 的版本号

    • MongoDB 的版本形式为 X.Y.Z,例如 5.0.4。
    • 如果 Y 是奇数(例如 4.3),则为开发版,建议开发测试使用
    • 如果 Y 是偶数(例如 4.4),则为稳定版,建议生产环境使用
  • 从版本 3.2 之后不再支持 32 位操作系统,,更多平台支持请查看《Supported Platforms》

安装

本例在 win10 操作系统下安装 5.0.4 版本 MongoDB

1、下载安装包

下载页面地址:https://www.mongodb.com/try/download/community

NoSQL 之 MongoDB - 02 MongoDB Server 安装、MongoDB Shell、基础概念、可视化工具_第1张图片

  • 选择下载社区版 Community

  • Version:默认选择最新稳定版(current),也可以手动选择其他版本

    • 注意:rc代表开发预览版,不建议使用
  • Platform:安装平台,默认选择用户当前操作系统

  • Package:安装包类型,这里选择 zip 类型演示手动安装

2、解压缩安装包

将安装包解压到指定的安装目录。

├─ bin # 核心文件
│   ├─ Install-Compass.ps1
│   ├─ mongo.exe # 客户端,用于连接数据库的服务端,操作数据库中的数据
│   ├─ mongo.pdb
│   ├─ mongod.exe # 服务端,用于启动 MongoDB 数据库服务
│   ├─ mongod.pdb
│   ├─ mongos.exe
│   ├─ mongos.pdb
│   └─ vcredist_x64.exe
├─ LICENSE-Community.txt
├─ MPL-2
├─ README
└─ THIRD-PARTY-NOTICES

MongoDB 不是图形软件,而是在命令行下运行的命令行工具,所以不能双击 mongod.exe 打开,而应该在命令行下执行:

# 首先进入 bin 目录
cd mongodb安装目录/bin
# 执行文件
.\mongod.exe --version

但是这样非常的麻烦,要想在命令行的任何目录中直接使用这些可执行文件,只需要将可执行文件所属的 bin 目录配置到环境变量中。

3、配置环境变量

首先复制 bin 目录地址,右键电脑打开属性:

NoSQL 之 MongoDB - 02 MongoDB Server 安装、MongoDB Shell、基础概念、可视化工具_第2张图片

重新打开命令行工具,运行命令测试是否配置成功。

mongod --version

现在命令行工具会现在当前目录查找名叫 mongod 的可执行文件,如果没有则会从配置的系统环境变量的目录中查找。

启动和停止数据库服务

# 启动 MongoDB 数据库服务
mongod --dbpath="数据存储目录"

数据存储目录需要手动创建,启动服务后会在该目录下初始化一系列文件。

如果单独执行 mongod,则会默认使用执行命令所处磁盘根目录的 /data/db 作为数据存储目录,前提是这个目录已经存在。

如果数据存储目录不存在,mongod命令就会执行失败,例如:

NonExistentPath: Data directory C:\\data\\db\\ not found. Create the missing directory or specify another path using (1) the --dbpath command line option, or (2) by adding the 'storage.dbPath' option in the configuration file.

使用 mongo 命令连接数据库,测试数据库服务是否启动:

mongo
# 命令会输出版本号和 connect 连接结果等信息

MongoDB 服务默认监听 27017 端口号。

关闭命令行工具,或者 Ctrl + C 停止 mongod 命令即可停止数据库服务。

MongoDB Shell

什么是 MongoDB Shell

MongoDB shell 是 MongoDB 官方提供的一个在命令行中用来连接操作 MongoDB 服务的客户端工具,一个交互式 JavaScript shell 接口。官方介绍:Legacy mongo Shell

MongoDB shell 是 MongoDB Server 安装的一部分,如果已经安装了 Server,MongoDB shell 将安装到与服务器二进制文件相同的位置,即 mongo.exe

在命令行使用 mongo 命令连接数据库的时候会提示:

Warning: the "mongo" shell has been superseded by "mongosh", which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in an upcoming release.
For installation instructions, see https://docs.mongodb.com/mongodb-shell/install/

警告:"mongo" shell 已被 "mongosh" 取代,它提供了更好的可用性和兼容性。"mongo" shell 已被弃用,将在即将发布的版本中删除。
有关安装说明,请参阅 https://docs.mongodb.com/mongodb-shell/install/

MongoDB v5.0 开始不推荐使用 mongo,而建议使用 mongosh,需要单独安装,之后会介绍 MongoDB 可视化管理工具,这里就不安装了。

mongosh 向后兼容,支持的方法使用与 mongo 中相应方法相同的语法。关于新的 MongoDB Shell 和使用请参考官方介绍:MongoDB Shell

MongoDB Shell 使用

使用 mongo 命令运行 MongoDB Shell 连接 MongoDB 数据库。

# 查看 MongoDB Shell 版本
mongo --version

连接本地主机上的 MongoDB 服务

默认在没有任何命令行选项的时候,会使用默认端口 27017 连接本地主机上的 MongoDB 实例:

# 运行 MongoDB Shell,打开一个 JavaScript 执行环境
mongo

也可使用 --port 命令行选项指定端口号:

mongo --port 28015

连接远程主机上的 MongoDB 服务

连接远程主机上的 MongoDB 服务需要明确指定主机名和端口号。

可以指定一个连接字符串,例如:

# 默认连接地址
# 方式1:指定一个连接字符串
mongo "mongodb://127.0.0.1:27017"
# 方式2:使用 --host 选项
mongo --host 127.0.0.1:27017
# 方式3:使用 --host 和 --port 选项
mongo --host 127.0.0.1 --port 27017

连接具有身份认证的 MongoDB 服务

默认 MongoDB 服务没有启用身份认证,如果要启用需要单独配置。

如果需要连接具有身份认证的 MongoDB 服务可以使用以下方式:

# 方式1:在连接字符串中指定用户名、身份验证数据库以及可选的密码,例如以 alice 用户身份连接远程 MongoDB 实例的 admin 数据库:
mongo "mongodb://[email protected]:28015/?authSource=admin"

# 方式2:使用命令行选项:
mongo --username alice --password --authenticationDatabase admin --host mongodb0.examples.com -- port 28015
# 如果指定 --password 选项而不输入密码,则 shell 程序将提示输入密码

MongoDB Shell 执行环境

使用 mongo 命令连接 MongoDB 后就进入 MongoDB Shell 执行环境,而不是终端。

注意:连接 MongoDB 服务和操作数据库的时候,需确保 MongoDB 服务是开启状态。

MongoDB Shell 提供了 JavaScript 执行环境,可以解析执行 JS 语言,除此之外,还包括:

  • 内置了一些数据库操作命令
    • show dbs - 显示所有数据库
    • db - 当前所处数据库,在没有数据的时候默认显示 test,当存储了数据,就会在 show dbs 命令中显示该数据库
    • use database
    • show collections
  • 提供了一大堆内置 API 来操作数据库
    • db.user.insert({name: ‘Jack’, age: 18})
    • db.user.find()

退出连接

  • exit
  • quit()
  • Ctrl + C
  • 关闭命令行工具

MongoDB 基础概念

  • Databases and Collections
  • Documents

数据存储机构

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

可以把 MongoDB 数据库想象成一个超级大对象,这个对象就是整个数据库最外部的容器,对象里有不同的集合,集合中有不同的文档。

例如:

{
    // 数据库 Database
    "数据库1": {
        // 集合 Collection,对应关系型数据库中的表 Table
        "用户": [
            // 文档 Document,对应关系型数据库中的行 Row
            {
                // 数据字段 Field,对应关系型数据库中的列 Column
                "id": 1,
                "username": '张三',
                "password": "123"
            },
            {
                "id": 2,
                "username": '李四',
                "password": "456"
            }
        ],
        "商品": [
            {
                "id": 1,
                "name": "Switch",
                "price": 100
            },
            {
                "id": 2,
                "name": "Mac",
                "price": 200
            }
        ]
    },
    // 数据库
    "数据库2": {}
    
    //...
}

数据库 Database

在 MongoDB 中,数据库包含一个或多个文档集合。

列出用户可用的数据库

# 在 MongoDB Shell 中执行
show dbs
# 输出:
admin   0.000GB
config  0.000GB
local   0.000GB

MongoDB 默认会有 3 个数据库,这些数据库名是保留的:

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

显示当前正在使用的数据库

db
# 输出(默认)
test

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

创建/切换数据库

use <database>

在 MongoDB 中的数据库只有真正有了数据才会被创建,包括默认使用的 test 数据库。

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

例如,以下命令使用 insertOne() 创建数据库 myNewDatabase 和集合 myCollection

use myNewDatabase
db.myCollection.insertOne( { x: 1 } )

删除数据库

# 切换到要删除的数据库
use <database>
# 删除当前数据
db.dropDatabase()

数据库名称命名限制

MongoDB Limits and Thresholds — Naming Restrictions

  • 区分大小写
    • 但大小写不能是数据库名称之间的唯一区别
    • 例如,已经有了数据库 salesDB,再创建数据库 salesdb 就会报错
  • Windows 上的命名限制
    • 对在 Windows 上运行的 MongoDB 的数据库命名限制,不能包含这些字符:/\. "$*<>:|?(注意包括空格)
  • Unix 和 Linux 系统的命名限制
    • 对在 Unix 和 Linux 上运行的 MongoDB 的数据库命名限制,不能包含这些字符:/\. "$(注意包括空格)
  • 名称长度
    • 数据库名称不能为空,并且必须少于 64 个字符

建议全部使用小写字母

集合 Collection

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

NoSQL 之 MongoDB - 02 MongoDB Server 安装、MongoDB Shell、基础概念、可视化工具_第3张图片

创建集合

如果集合不存在,MongoDB 将在您首次存储该集合的数据时创建该集合。

例如,下例如果 myNewCollection2myNewCollection3 集合不存在,insertOnecreateIndex 方法就会创建各自的集合。

db.myNewCollection2.insertOne( { x: 1 } )
db.myNewCollection3.createIndex( { y: 1 } )

显式创建集合

MongoDB 提供 db.createCollection() 方法显式创建具有各种选项的集合,例如最大大小或文档验证规则。

如果不需要指定选项,则无需显式创建,MongoDB 在首次存储数据时会创建新集合。

文档验证

默认情况下,集合不要求其文档具有相同的架构,即 单个集合中的文档不需要具有相同的字段集,并且集合中的文档之间的字段数据类型可以不同。

这种灵活性在很多场景下也许并不适用,这些场景仍需要保证数据结构的一致性,在使用时可以对文档进行结构设置。

从 MongoDB 3.2 开始,您可以在更新和插入操作期间对集合强制执行文档验证规则。

查看集合

# 查看当前数据库中的集合列表
show collections

删除集合

# 删除当前数据库中的指定集合
db.集合名称.drop()

集合名称命名限制

MongoDB Limits and Thresholds — Restriction on Collection Names

  • 集合名称应以下划线或字母字符开头,并且:
    • 不能包含 $
    • 不能是一个空字符串(""
    • 不能包含空格
    • 不能以 system. 为前缀(保留供内部使用)
    • 如果集合名称包含特殊字符(如下划线)或以数字开头,要访问集合请使用 mongosh 中的 db.getCollection() 方法或驱动程序(Drivers)中类似的方法
  • 长度限制:
    • MongoDB 的 collection/view 命名空间包括数据库名称、.点分隔符和 collection/view 的名称(例如 .
    • 4.4 及更高版本,命名空间的最大长度限制为 255 字节
    • 4.2 及更早版本,命名空间的最大长度限制为 120 字节

文档 Document

MongoDB 将数据记录存储为 BSON 文档。

BSON(Binary) 是 JSON 文档的二进制表示,它包含比 JSON 更多的数据类型。

  • BSON 规范:bsonspec.org
  • BSON 支持的数据类型:BSON Types

NoSQL 之 MongoDB - 02 MongoDB Server 安装、MongoDB Shell、基础概念、可视化工具_第4张图片

文档结构

MongoDB 文档由 filed-value 对组成,具有以下结构:

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

字段名称命名限制

MongoDB Limits and Thresholds — Restrictions on Field Names

  • 字段名是字符串
  • 不能包含空格
  • 3.6 版本开始服务器允许包含 .$ 的字段名,但使用上会出现很多问题,不建议使用
    • 5.0 版本增加了一些限制,详情参考:Field Names with Periods (.) and Dollar Signs ($)
  • 字段名 _id 保留用作主键
  • 如果 _id 包含子字段,则子字段名称不能以 $ 符号开头

_id 字段

Documents — The (_id) Field

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

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

  • 默认情况下,MongoDB 在创建集合时在 _id 字段上创建唯一索引。
  • _id 字段始终是文档中的第一个字段。如果服务器首先接收到没有 _id 字段的文档,则服务器会将该字段移到开头。
  • _id 的值在集合中必须是唯一的、不可变的
  • _id 的值可以是任何 BSON 数据类型的值,除了 array、regex 和 undefined
  • 如果 _id 包含子字段,则子字段名称不能以 $ 符号开头

文档大小限制

BSON 文档的最大 size 为 16MB。

最大文档限制有助于确保单个文档不会使用过多的内存或在传输过程中使用过多的带宽。

为了存储超过最大限制的文档,MongoDB 提供了 GridFS API。更多信息请参阅 mongofiles 和驱动程序(Drivers)对应的文档。

文档字段排序

与 JavaScript 对象不同,BSON 文档中的字段是有序的。

  • 查询中的字段顺序
    • 在比较文档时,字段顺序非常重要。例如,将文档 {a:1 b:1} 与 查询中的字段 {b:1, a: 1} 进行比较时
    • 为了高效的执行查询,查询引擎可以在查询处理期间对字段重新排序
  • 写操作中的字段顺序
    • 对于写操作,MongoDB 保留文档字段的顺序,但以下情况除外
      • _id 字段始终是文档中的第一个字段
      • 包括重命名字段名的更新可能会导致文档中字段的重新排序

MongoDB 中的数据类型

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

var mydoc = {
    _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 保存一个嵌入的文档,其中包含 firstlast 子字段
  • birthdeath 持有 Date 类型的值
  • contribs 包含一个字符串数组
  • views 包含 NumberLong 类型的值

下面是 MongoDB 支持的常用 BSON 数据类型(更多查看 BSON Types):

类型 整数标识符 别名(字符串标识符) 描述
Double 1 “double” 双精度浮点值。用于存储浮点值。
String 2 “string” 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
Object 3 “object” 用于内嵌文档
Array 4 “array” 用于将数组或列表或多个值存储为一个键。
Binary data 5 “binData” 二进制数据。用于存储二进制数据。
Undefined 6 “undefined” 不建议使用
ObjectId 7 “objectId” 对象 ID。用于创建文档的 ID。
Boolean 8 “bool” 布尔值。用于存储布尔值(true/false)。
Date 9 “date” 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
Null 10 “null” 用于创建空值。
Regular Expression 11 “regex” 正则表达式类型。用于存储正则表达式。
32-bit integer 16 “int” 整型数值。用于存储 32 位整型数值。
Timestamp 17 “timestamp” 时间戳。记录文档修改或添加的具体时间。
64-bit integer 18 “long” 整型数值。用于存储 64 位整型数值。
Decimal128 19 “decimal” 数值类型。常用于存储更精确的数字,例如货币。

MongoDB 可视化管理工具

为了更方便的使用 MongoDB 学习数据的增删改查(CRUD),建议选择一款图形软件来操作:

  • Robo 3T
  • Studio 3T
  • Navicat
  • MongoDB Compass:MongoDB 官方工具

这些工具各有优劣,根据喜好选择即可,本例使用 Navicat 工具。

Navicat 下载安装和使用

Navicat 官方产品列表:

  • Navicat 是付费的,可以安装14天免费使用版或自行激活
  • 可以安装支持多种数据库的 Navicat Premium
  • 也可以安装支持单个数据库的 Navicat,价格便宜些

连接数据库

NoSQL 之 MongoDB - 02 MongoDB Server 安装、MongoDB Shell、基础概念、可视化工具_第5张图片

填写数据库连接信息,点击测试连接

NoSQL 之 MongoDB - 02 MongoDB Server 安装、MongoDB Shell、基础概念、可视化工具_第6张图片

测试连接成功,点击确定创建连接

NoSQL 之 MongoDB - 02 MongoDB Server 安装、MongoDB Shell、基础概念、可视化工具_第7张图片

双击左侧的数据库名称进行连接,默认不会显示 MongoDB 本身自带的 3 个数据库(admin、config、local)

NoSQL 之 MongoDB - 02 MongoDB Server 安装、MongoDB Shell、基础概念、可视化工具_第8张图片

使用 MongoDB Shell 添加数据自动创建 test 数据库:

mongo
db.user.insert({name: "张三", age: 18})

或直接在 Navicat 工具中右键新建数据库,通过新建查询添加数据:

NoSQL 之 MongoDB - 02 MongoDB Server 安装、MongoDB Shell、基础概念、可视化工具_第9张图片

NoSQL 之 MongoDB - 02 MongoDB Server 安装、MongoDB Shell、基础概念、可视化工具_第10张图片

首次添加数据后左侧数据库名称还是灰色的,可以右键刷新更新状态,双击集合查看集合内的数据:

NoSQL 之 MongoDB - 02 MongoDB Server 安装、MongoDB Shell、基础概念、可视化工具_第11张图片

点击 JSON 视图切换查看方式:

NoSQL 之 MongoDB - 02 MongoDB Server 安装、MongoDB Shell、基础概念、可视化工具_第12张图片

除了执行查询语句,也可以在图形界面中直接操作增删改查操作。

可视化工具只是方便管理数据库,在实际开发中还是需要通过接口执行 MongoDB 语法的命令操作数据库。

稍后会通过 Navicat 的查询窗口运行和学习 MongoDB 语法。

你可能感兴趣的:(#,MongoDB,mongodb,nosql,数据库)