【Docker中使用MongoDB数据库】

Mongodb的介绍

MongoDB存储的数据特点

  • 数据量大(为大数据而生)
  • 价值较低 (最为显著的特点. 例如贴吧的帖子)
  • 写入操作频繁
    对于这样的数据,我们更适合使用MongoDB来实现数据的存储

什么是MongoDB

MongoDB 是一个跨平台的,面向文档(文档就是一行记录)的数据库,是当前 NoSQL 数据库产品中最热门的一种。它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的产品。它支持的数据结构非常松散,是类似 JSON 的 BSON (BSON可以直接当做为json)格式,因此可以存储比较复杂的数据类型。
​ MongoDB 的官方网站地址是:http://www.mongodb.org/

MongoDB的体系结构

MongoDB 的逻辑结构是一种层次结构。主要由:
文档(document 一行记录)、集合(collection 一张表)、数据库(database)这三部分组成的。逻辑结构是面
向用户的,用户使用 MongoDB 开发应用程序使用的就是逻辑结构。

  • MongoDB 的文档(document),相当于关系数据库中的一行记录。
  • 多个文档组成一个集合(collection),相当于关系数据库的表。
  • 多个集合(collection),逻辑上组织在一起,就是数据库(database)。
  • 一个 MongoDB 实例支持多个数据库(database)。
    文档(document)、集合(collection)、数据库(database)的层次结构如下图:
    层次结构
    下表是MongoDB与MySQL数据库逻辑结构概念的对比:
    对比
    注意:MongoDB并不是关系型数据库.

Docker安装与启动Mongodb

docker安装mongodb镜像

执行命令 docker pull mong,下载mongo的最新版本的镜像
pull mongo

运行mongo的容器

执行命令:

docker run -di --name=tensquare_mongo -p 27017:27017 mongo

返回容器的id,即代表容器启动成功。
启动容器

查看Docker容器启动的服务

docker ps

启动的服务

添加防火墙端口

我用的华为云的CentOS服务器,放开27017的端口.

连接Mongo

docker exec -it mongodb mongo admin  

来凝结Mongo

创建mongodb的数据库和集合

插入数据:

db.spit.insert({_id:"1",content:"我还是没有想明白到底为啥出错",userid:"1012",nickname:"小明",visits:NumberInt(2020)});
db.spit.insert({_id:"2",content:"加班到半夜",userid:"1013",nickname:"凯撒",visits:NumberInt(1023)});
db.spit.insert({_id:"3",content:"手机流量超了咋办?",userid:"1013",nickname:"凯撒",visits:NumberInt(111)});
db.spit.insert({_id:"4",content:"坚持就是胜利",userid:"1014",nickname:"诺诺",visits:NumberInt(1223)});

插入数据

查询全部数据:

db.spit.find();

根据id进行查询:

db.spit.find("_id":"1");

有2条数据,如果想只查询一条数据出来,那么可以用findOne:

db.spit.findOne();

使用limit方法,来指定返回的记录条数, 该方法的调用在find方法之后:

db.spit.find({"userid":"1013"}).limit(1)

条件为查找到的要修改的数据. 修改后的数据,即对查找到的数据,进行数据的修改:
db.集合名称.update(条件,修改后的数据)
例如:执行命令,进行对id为2的数据进行修改

db.spit.update({"_id":"2"},{visit:2000})

修改
在这里插入图片描述
如果修改文档的时候,要修改的字段在原字段中不存在,那么会自动的增加该字段,并给该字段赋值
例如:执行命令

db.spit.update({"_id":"4"},{$set:{addFiled:"测试修改新增字段"}})

会自动增加了addFiled字段
删除命令
删除文档的语法结构:

db.集合名称.remove(条件)

删除某个表的全部数据 (谨慎使用)

db.spit.remove({})

最为常用的是根据条件删除
例如:删除id为2的数据

db.spit.remove({"_id" : "2"})

结果如下图所示,id为2的数据,成功进行了删除

Mongodb的查询总数量和模糊查询

查询总数量

查询spit集合中的总文档数

db.spit.count()

结果如下:
在这里插入图片描述

根据条件查询总数量

查询浏览量为2000的记录数
执行命令:

db.spit.count({"visits" : 2000})

在这里插入图片描述

模糊查询

MongoDB的模糊查询是通过正则表达式的方式实现的。格式为:
模糊查询字符串
里面的内容,相当于mysql中like中的内容.
例如:

db.spit.find({"content" ://})

结果如图:
在这里插入图片描述

Mongodb的复杂命令操作

大于小于不等于的查询

关于大于小于不等于的查询使用如下:

db.集合名称.find({ “field” : { $gt: value }}) // 大于: field > value
db.集合名称.find({ “field” : { $lt: value }}) // 小于: field < value
db.集合名称.find({ “field” : { $gte: value }}) // 大于等于: field >= value
db.集合名称.find({ “field” : { $lte: value }}) // 小于等于: field <= value
db.集合名称.find({ “field” : { $ne: value }}) // 不等于: field != value

例如:查询浏览量大于1800的
执行语句

db.spit.find({"visits" : {$gt:1800}})

结果如下:
在这里插入图片描述

包含与不包含

包含使用$in操作符
例如:查询userid字段包含1013和1014的文档
执行命令:

db.spit.find({"userid" : {$in:["1013","1014"]}})

在这里插入图片描述
不包含,使用$nin操作符
例如 查询吐槽集合中userid字段不包含1013和1014的文档
执行命令

db.spit.find({"userid" : {$nin:["1013","1014"]}})

结果如下:
在这里插入图片描述

多条件连接查询

如果需要查询同时满足两个以上条件,需要使用and操作符将条件进行关联。(相当于SQL的and)格式为:“and”操作符将条件进行关联。(相当于SQL的and)格式为:“and : [{ },{ },{ } ]”

例如:查询访问量,大于1000, 小于2200的数据
执行如下的命令:

db.spit.find({$and:[{visits:{$gt:1000}}, {visits:{$lt:2200} }]})

结果如下:
在这里插入图片描述
如果两个以上条件之间是或者的关系,我们使用 or操作符进行关联,与前面and的使用方式相同。
格式为:
多个条件用or

$or:[ { },{ },{ } ]

例如查询userid为1014或者浏览量小于2200的数据
执行如下的语句

db.spit.find({$or:[{userid:"1014"}, {visits:{$lt:2200} }]})

结果如图:
在这里插入图片描述

列值增长

列值增长用于实现对某列值在原有值的基础上进行增加或减少,可以使用$inc运算符来实现
例如:对id为4的数据,浏览量字段增加1 ,执行命令

db.spit.update({"_id" : "4"},{$inc:{visits:NumberInt(1)}})

结果如下,可以看到浏览量从1223变为了1224
在这里插入图片描述
如果要把浏览量减一, 那么把增加的值变为-1即可, 执行命令

db.spit.update({"_id" : "4"},{$inc:{visits:NumberInt(-1)}})

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Mrchai521/article/details/108444711