概念解析——下载安装——基本命令

  • MongoDB
  • 1.1 简介
  • 1.1.1 什么是NoSQL:
  • 1.1.2 为什么使用NoSQL :
  • 1.1.3 弱点:
  • 1.1.4 什么是MongoDB?
  • 1.1.5 MongODB特点:
  • 1.2 docker 下载、安装MongoDB
  • 1.2.1 创建无密码登录的MongoDB服务
  • 1.2.2 创建密码登录的MongoDB服务
  • 1.3 MongoDB 对数据库操作常用命令
  • 1.3.1 切换/创建数据库 `use test`
  • 1.3.2 查询所有数据库: `show dbs`
  • 1.3.3 删除当前使用数据库`db.dropDatabase()`
  • 1.3.4 查看当前使用的数据库`db.getName()`
  • 1.3.5 显示当前db状态`db.stats()`
  • 1.3.6 当前db版本 `db.version()`
  • 1.3.7 查看当前db的链接机器地址`db.getMongo()`
  • 1.4 MongoDB 文档
  • 1.5 MongoDB 集合
  • 1.5.1 创建一个集合 `db.createCollection("collName")`
  • 1.5.2 得到指定名称的集合 `db.getCollection("user")`
  • 1.6 MongoDB 数据类型
  • 1.7 适用场景
  • 1.8 不适用场景


MongoDB

1.1 简介

MongoDB官方文档:https://www.mongodb.com/
MongoDB 菜鸟教程: https://www.runoob.com/mongodb/mongodb-databases-documents-collections.html

1.1.1 什么是NoSQL:

NoSQL(NoSQL= Not Only sQL),意即反SQL运动,指的是非关系型的数据库,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于目前铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入

1.1.2 为什么使用NoSQL :

1、对数据库高并发读写。
2、对海量数据的高效率存储和访问。
3、对数据库的高可扩展性高可用性

1.1.3 弱点:

1、数据库事务—致性需求
2、数据库的写实时性读实时性需求
3、对复杂的SQL查询,特别是多表关联查询的需求

1.1.4 什么是MongoDB?

MongoDB是由C++语言编写的,是一个基于分布式文件存储开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB文档类似于JSON对象。字段值可以包含其他文档,数组及文档数组。

docker compose 部署mongodb 管理员账号密码 docker启动mongodb_缓存

1.1.5 MongODB特点:

  1. MongoDB是一个面向文档存储的数据库,操作起来比较简单和容易。
  2. 你可以在 MongoDB记录中设置任何属性的索引(如:
    FirstName="Sameer"Address=“8 Gandhi Road”)来实现更快的排序
  3. 你可以通过本地或者网络创建数据镜像,这使得MongoDB,有更强的扩展性。
  4. 如果负载的增加(需要更多的存储空间和更强的处理能力),它可以分布在计算机网络中的其他节点上这就是所谓的分片。
  5. Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  6. MongoDb使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段。
  7. Mongodb中的 Map/reduce主要是用来对数据进行批量处理和聚合操作。
  8. Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
  9. Map函数和Reduce 函数是使用Javascript.编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce,操作。
  10. GridFS是 MongoDB中的一个内置功能,可以用于存放大量小文件。
  11. MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
  12. MongoDB支持各种编程语言:RUBY*,PYTHON,JAVA,C++,PHP,C#等多种语言。
  13. MongoDB安装简单。

1.2 docker 下载、安装MongoDB

1.2.1 创建无密码登录的MongoDB服务

  1. 拉取镜像docker pull mongo
  2. 创建容器并启动容器 docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db mongo
  3. 进入容器 docker exec -it mymongo bash
  4. 进入MongoDB客户端进行操作mongo
  5. 在客户端输入show dbs查询所有的数据库

docker compose 部署mongodb 管理员账号密码 docker启动mongodb_缓存_02

[root@VM-4-5-centos data]# docker exec -it mymongo bash
root@ca89659e13c9:/# mongo
MongoDB shell version v5.0.5
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("20596f76-754a-42b5-866d-84e2cfdbac34") }
MongoDB server version: 5.0.5
================
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/
================
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
        https://community.mongodb.com
---
The server generated these startup warnings when booting: 
        2022-10-06T09:17:09.772+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
        2022-10-06T09:17:10.383+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
        2022-10-06T09:17:10.383+00:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
        2022-10-06T09:17:10.384+00:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'
---
---
        Enable MongoDB's free cloud-based monitoring service, which will then receive and display
        metrics about your deployment (disk utilization, CPU, operation statistics, etc).

        The monitoring data will be available on a MongoDB website with a unique URL accessible to you
        and anyone you share the URL with. MongoDB may use this information to make product
        improvements and to suggest MongoDB products and deployment options to you.

        To enable free monitoring, run the following command: db.enableFreeMonitoring()
        To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
>

1.2.2 创建密码登录的MongoDB服务

设置账号密码和用户权限,可以有效的防止数据库的数据被恶意的攻击造成数据丢失;

创建容器并启动容器 docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db mongo --auth

1. 进入mongo客户端,
[root@VM-4-5-centos ~]# docker exec -it mymongo mongo admin

2. 创建超级用户
db.createUser({ user: "root" , pwd: "root", roles: ['root']})

3.打开mongoDB数据库,并进入yygh_hosp数据库
(可切换数据库,增加用户)
> use yygh_hosp

4.添加一个用户  名为 yygh_user,密码为 123456
db.createUser(
     {
       user: "yygh_user",
       pwd: "123456",
       roles: [{ role:'userAdminAnyDatabase', db: 'admin'}]
     }
)

5. 尝试使用上面创建的用户信息进行连接
db.auth('yygh_user','123456')
> use yygh_hosp
switched to db yygh_hosp
> db.createUser(
...      {
...        user: "yygh_user",
...        pwd: "123456",
...        roles: ["readWrite"]
...      }
... )
Successfully added user: { "user" : "yygh_user", "roles" : [ "readWrite" ] }
> db.auth('yygh_user','123456')
1
>

1.3 MongoDB 对数据库操作常用命令

1.3.1 切换/创建数据库 use test

如果数据库不存在,就去创建数据库,否则切换到指定数据库

1.3.2 查询所有数据库: show dbs

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

1.3.4 查看当前使用的数据库db.getName()

1.3.5 显示当前db状态db.stats()

1.3.6 当前db版本 db.version()

1.3.7 查看当前db的链接机器地址db.getMongo()

1.4 MongoDB 文档

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

需要注意:

1、文档中的键/值对是有序的
2、文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型((甚至可以是整个嵌入的文档)。
3、MongoDB区分类型大小写
4、MongoDB的文档不能有重复的键。·
5、文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

文档键命名规范:.

1、键不能含有\0(空字符)。这个字符用来表示键的结尾。
2、. 和 $ 有特别的意义,只有在特定环境下才能使用。
3、以下划线"_"开头的键是保留的(不是严格要求的)。

1.5 MongoDB 集合

  • 集合就是MongoDB文档组,类似于RDBMS(关系数据库管理系统:RelationalDatabase Management System)中的表格。
  • 集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。,

1.5.1 创建一个集合 db.createCollection("collName")

docker compose 部署mongodb 管理员账号密码 docker启动mongodb_数据_03

1.5.2 得到指定名称的集合 db.getCollection("user")

1.6 MongoDB 数据类型

docker compose 部署mongodb 管理员账号密码 docker启动mongodb_mongodb_04

1.7 适用场景

1、网站数据 : Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
2、缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。
3、大尺寸,低价值的数据︰使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。
4、高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对Map Reduce弓摩的内置支持。
5、用于对象及JSON数据的存储:Mongo的 BSON数据格式非常适合文档化格式的存储及查询。

1.8 不适用场景

1、高度事务性的系统∶例如银行或佘计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
2、传统的商业智能应用︰针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。