MongoDB精简入门(体系结构、Docker安装MangoDB、常用命令)

news/2024/7/8 4:38:19

文章目录

    • 什么样的场景会需要MongoDB
    • 什么是MongoDB
    • 特点
    • MongoDB的体系结构
    • MongoDB数据类型
    • Docker安装MongoDB
    • MongoDB的常用命令
    • 可视化工具

什么样的场景会需要MongoDB

首先,我们已经学了很多数据库了,Redis、Mysql、Oracle,那为什么还需要MongoDB呢
看看下面这样的需求场景:
1、数据量很大
2、写入操作频繁
3、价值较低(解释一下:就是说在几十万数据中零星丢个几条,问题不大,不会影响业务)
对于这样的功能需求,非常适合用MongoDB来实现数据存储

什么是MongoDB

  • MangoDB是一个基于分布式文件存储的数据库 (分布式就是将数据分散在多台独立设备上,文件存储就是说MangoDB可以直接存储像文本、音频、视频这样的数据,以GridFS方式)
  • 由C++编写,旨在为Web应用提供可扩展 的高性能数据存储解决方案
  • MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库中功能最丰富(支持一些条件查询,但数据是以非关系型数据库中的K-V形式存储的),最像关系型数据库的
  • MongoDB支持的数据结构非常松散,是类似于json的bson格式(啊,其实就是把json转成字节类型,目的是为了读写快),因此可以存储比较复杂的数据类型,字段值可以包含其他文档、数组及文档数组

特点

(反正也记不太住,看看了解一下)

  • 最大的特点:它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似于关系型数据库单表查询的绝大部分功能,而且它还支持设置任何属性的索引。
  • 主要特点是:高性能、易部署、易使用、存储数据非常方便
    主要的功能特性有:
    1、面向集合存储,易存储对象类型的数据
    2、模式自由
    3、支持动态查询(可以简单的理解为参数是先由占位符占着的,等程序运行时传入实际参数才进行查询)
    4、支持完全索引,包括内部对象和内嵌数组,没有复杂的连接
    5、支持复制和故障恢复
    6、使用高效的二进制数据存储,包括大型对象(如视频等)
    7、自动处理碎片,以支持云计算层次的扩展性
    8、支持多种语言(如ruby,python,java,c++,php,c#等多种语言)

MongoDB的体系结构

  • MongoDB的文档(document),相当于关系数据库中的一行记录(即一条数据)
  • 多个文档组成一个集合(collection),相当于关系数据库中的表
  • 多个集合,逻辑上组织在一起,就组成了数据库(database)
  • 一个MongoDB实例支持多个数据库(database)
    层次结构如下图所示:
    在这里插入图片描述
    对照关系型数据库来理解其结构
MongoDB关系型数据库
数据库(databases)数据库(databases)
集合(collection)表(table)
文档(document)行(row)

MongoDB数据类型

  • String :存储数据常用的数据类型,在MongoDB中,UTF-8编码的字符串才是合法的
  • Integer:用于存储数值,根据服务器,可分为32位或64位
  • Boolean : 用于存储布尔值
  • Double:用于存储浮点值
  • Array:将数组或列表或多个值存储为一个键
  • TimeStamp:时间戳,记录文档修改或添加的具体时间
  • Object: 用于内嵌文档
  • Null:用于创建空值
  • Symbol符号:等同于字符串类型,但不同的是,它一般采用特殊符号类型的语言
  • Date日期时间:用UNIX时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建Date对象,传入年月日信息
  • Object ID对象:用于创建文档的ID
  • Binary Data 二进制数据:用于存储二进制数据
  • Code代码类型:用于在文档中存储JavaScript代码
  • Regular expression正则表达式类型:用于存储正则表达式

PS:值得说一下的Object ID
MongoDB中存储的文档必须有一个_id键,这个键的值可以是任何类型的,默认是个ObjectID对象
ObjectID类似唯一主键,可以很快的生成和排序,包含12 bytes,含义如下:
在这里插入图片描述

1、前4个字节表示创建unix时间戳,格林尼治时间UTC时间,比北京时间晚了8个小时
2、接下来的3个字节是机器标识码
3、紧接着的2个字节由进程id组成PID
4、最后3个字节是随机数

Docker安装MongoDB

  • docker拉取镜像
docker pull mongo:latest

下载成功后如下图所示:
在这里插入图片描述
用docker tag 命令给镜像改个名哈,当然不改也行

  • 启动进入
docker run -itd --name mongo --hostname mongo -p 27017:27017 mongo

在这里插入图片描述

  • 进入mongoDB容器
docker exec -it mongo bash

在这里插入图片描述

  • 连接数据库
mongo
或者 
mongo 127.0.0.1

在这里插入图片描述
在执行这条命令之前可以看看mongo --help看看mongo支持的一些命令
在这里插入图片描述

MongoDB的常用命令

mongo命令登录后,首先可以用help命令看看支持的一些命令
在这里插入图片描述

  • 看看当前实例下的数据库(show databases)
    在这里插入图片描述
  • 选择和创建数据
    use 有则使用,没有则创建,只有创建了集合后才能看到数据库
    这是当数据库本身存在时:
    在这里插入图片描述
    这是我们创建一个数据库:
    在这里插入图片描述
  • 插入和查询文档
    我们插入一些数据并进行查询
> db.comment.insert({_id:"1",content:"NoSQL就是最好的!",userId:"001",thumbUp:2022})
WriteResult({ "nInserted" : 1 })
> db.comment.insert({_id:"2",content:"不,Mysql才是最好的",userId:"002",thumbUp:2023})
WriteResult({ "nInserted" : 1 })
> db.comment.insert({_id:"3",content:"能砍菜的刀都是好刀",userId:"003",thumbUp:2024})
WriteResult({ "nInserted" : 1 })
> db.comment.insert({_id:"4",content:"坚持写bug,让世界更快乐",userId:"004",thumbUp:2025})
WriteResult({ "nInserted" : 1 })
> db.comment.find()
{ "_id" : ObjectId("624c8bd4e70580ee616dd388"), "name" : "Dean", "id" : "1" }
{ "_id" : "1", "content" : "NoSQL就是最好的!", "userId" : "001", "thumbUp" : 2022 }
{ "_id" : "2", "content" : "不,Mysql才是最好的", "userId" : "002", "thumbUp" : 2023 }
{ "_id" : "3", "content" : "能砍菜的刀都是好刀", "userId" : "003", "thumbUp" : 2024 }
{ "_id" : "4", "content" : "坚持写bug,让世界更快乐", "userId" : "004", "thumbUp" : 2025 }

在这里插入图片描述

  • 条件查询
> db.comment.find({userId:"002"})
{ "_id" : "2", "content" : "不,Mysql才是最好的", "userId" : "002", "thumbUp" : 2023 }
> db.comment.find().limit(2)
{ "_id" : ObjectId("624c8bd4e70580ee616dd388"), "name" : "Dean", "id" : "1" }
{ "_id" : "1", "content" : "NoSQL就是最好的!", "userId" : "001", "thumbUp" : 2022 }

在这里插入图片描述

单纯看名字应该可以看出是什么意思,就不多说了

  • 修改和删除数据
> db.comment.update({_id:'2'},{$set:{thumbUp:20000}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.comment.find({userId:"002"})
{ "_id" : "2", "content" : "不,Mysql才是最好的", "userId" : "002", "thumbUp" : 20000 }
> db.comment.remove({name:"Dean"})
WriteResult({ "nRemoved" : 1 })
> db.comment.find()
{ "_id" : "1", "content" : "NoSQL就是最好的!", "userId" : "001", "thumbUp" : 2022 }
{ "_id" : "2", "content" : "不,Mysql才是最好的", "userId" : "002", "thumbUp" : 20000 }
{ "_id" : "3", "content" : "能砍菜的刀都是好刀", "userId" : "003", "thumbUp" : 2024 }
{ "_id" : "4", "content" : "坚持写bug,让世界更快乐", "userId" : "004", "thumbUp" : 2025 }

在这里插入图片描述

  • 更多操作(例如count和正则表达式)
    在这里插入图片描述
    在这里插入图片描述

可视化工具

一直从控制台打这个代码实在是太不方便了,尤其有好多花括号和圆括号,所以选择一个可视化工具非常重要,我这里最终选择了Rob 3T

MongoDB有很多可视化工具,如robomongo,Studio 3T(功能强大但收费),Robo 3T(免费)

以上。(实在太困了,先睡了)


http://www.niftyadmin.cn/n/1756367.html

相关文章

Java链接MongoDB进行CRUD

文章目录Mongo-Driver开干创建一个maven工程,pom文件中添加依赖编写crud代码Mongo-Driver Mongo支持多种语言,mongo-driver是mongo官方推出的java连接mongoDB的驱动包,相当于JDBC驱动,通过mongo-driver完成对MongoDB的操作Mongo …

SpringBoot整合MongoDB完成增删改查(入门级)

文章目录开干整体文件结构如下创建springBoot项目,pom文件中添加相关依赖yaml文件中配置mongo地址准备一个实体类通过MongoTemplate查询通过MongoRepository的方式查询所有新增数据修改数据分页查询自定义的条件查询一些废话: 上一篇写了java链接MongoDB…

MySQL进阶_1 (体系结构、存储引擎、SQL优化、索引使用)

文章目录MySQL体系结构术语浅解一些缩写Mysql系统自带的数据库元数据MySQL数据库文件存储引擎Mysql存储引擎的特性概览MyISAMInnoDBMEMORYMERGE存储引擎怎么选SQL优化步骤查询SQL的执行效率定位低效率的SQLexplain命令分析执行计划show profile的使用优化器trace工具的使用索引…

MySQL进阶_2(应用优化、缓存优化、内存优化、锁)

文章目录一点前言应用优化连接池减少数据库的访问负载均衡缓存优化概述操作流程查询缓存参数设置查询缓存的使用缓存失效的情况内存优化优化原则内存优化说明MySQL并发度调整锁(浅了解一下)一点前言 Mysql可以通过调整参数进行调优,所以本篇…

关于打代码的一些些心得

些许废话 零零散散也正式以打代码为生快一年半了,从代码写的稀碎到稍微能总结出一点东西,也算是一个一直在向上缓慢行走的状态了 很难说我喜欢代码这件事,原本选择也只是为了糊口,但从面向百度编程,到一点点写出带着…

VMware Workstation中安装Centos 7,使用NAT模式连接网络

VMware Workstation有三种方式连接网络,其他两种请自行百度,这里着重讲解NAT方式。 从大学开始学Linux,装的Ubuntu,瞎jb地搞了下,就稀里糊涂联网了,后来换成Centos,又重新设置联网,…

CentOs7查看系统已有的用户和用户组

查看用户: cut -d : -f 1 /etc/passwd 查看用户组: cut -d : -f 1 /etc/group 删除xiaoluo这个用户: userdel -r xiaoluo

本地浏览器访问虚拟机中安装的elasticsearch,访问失败

首先检查虚拟机是否开启了,再检查虚拟机中的es是否开启了 首先先介绍一下我的环境,: 1:虚拟机中安装的CentOS7和我的本机可以互相ping通。 2:CentOs7的防火墙被我也关闭了 3:启动es不报错,el…