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

什么样的场景会需要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(免费)

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值