MongoDB(芒果数据库)学习(一)———增删改查

MongoDB数据库CRUD(增删改查)的操作

在这里插入图片描述

(1)NoSQL 简介

NoSQL有时也称作Not Only SQL的缩写,意即"不仅仅是SQL"。
现代的计算网络,每天上都会产生大量数据。
这些数据大部分都是由关系性数据库系统(RDBMS)来管理的。
NoSQL用于超大规模数据的存储。
现在针对大数据处理以及高并发、高读写推荐使用,NoSQL被广泛应用。(例如国外的谷歌、Facebook。国内阿里、腾讯每天为用户收集万亿比特的数据)等,创业型公司很多使用。NoSQL无需多余操作就可以横向扩展。

(2)MongoDB三个概念

MongoDB的数据模型是面向文档的,简单理解 这个数据库中存的是各种各样的 JSON。(BSON)。
MongoDB属于NOSQL,了解mongodb需要先知道这三个名词代表含义。

  1. 数据库(database)
    数据库是一个仓库,在仓库中可以存放集合。
  2. 集合(collection)
    集合类似于数组,在集合中可以存放文档。
    (类似于SQL中的表空间)
  3. 文档(document)
    文档数据库中的最小单位,我们存储和操作的 内容都是文档。
    (类似于SQL中的表)

以上为了方便理解与传统SQL进对比,但之后不要SQL思想去学习。

二、MongoDB操作

(1)MongoDB基本指令

在mongodb中,数据库和集(collection)都不需要手动创建,当我们创建的文档时,如果文档所在的集合或数据库都没有,mongodb会自动创建集合与数据库。
基本指令:
1、Show dbs/Show databases
显示当前的所有数据库
在这里插入图片描述
2、Use test_table
进入document文件(或者表中)
在这里插入图片描述
3、db
表示当前所处数据库
在这里插入图片描述
4、show collections
显示所有集合
在这里插入图片描述

(2)数据库CRUD的操作

操作工具使用的是studio3T。
因为使用语法,还是想讲的细一点儿。会附截图。

1、Insert(向集合中插入文档)

单个:db.collection.insert()或者 db.collection.insertOne()
db.emp.insert({name:“索隆”,postion:“左副”,gender:“男”});
在这里插入图片描述
多个:db.collection.insertMany()
这里需要注意下写法,"[ ]" ,如果写成了

db.emp.insert(
    {name:"山治",postion:"右副",gender:"男"},
    {name:"乔巴",postion:"船医生",gender:"中性"},
    {name:"娜美",postion:"领航员",gender:"男"},
    {name:"索隆",postion:"左副",gender:"男"}
);

会只有一条记录,之后也会有"[ ]" 这种问题,但只是写法问题就不去提了。
在这里插入图片描述
所以写成:

db.emp.insert([
    {name:"山治",postion:"右副",gender:"男"},
    {name:"乔巴",postion:"船医生",gender:"中性"},
    {name:"娜美",postion:"领航员",gender:"男"},
    {name:"乌索普",postion:"逆风大神",gender:"男"},
    {name:"索隆",postion:"左副",gender:"男"}
]);

在这里插入图片描述
或者写成官方文档格式:

db.emp.insertMany([
    {name:"山治",postion:"右副",gender:"男"},
    {name:"乔巴",postion:"船医生",gender:"中性"},
    {name:"娜美",postion:"领航员",gender:"男"},
    {name:"乌索普",postion:"逆风大神",gender:"男"},
    {name:"索隆",postion:"左副",gender:"男"}
]);

都是可以的。在这里插入图片描述
以上是Insert()、insertOne()、insertmany()、区别不大。
但One会明确插入一个,Many会插入多个,在官方文档也是说明在3.2版本后追加的新功能,肯定还是有一定作用。
之后的改删会有区别。有详讲。
在这里插入图片描述

2、Find(查询所有符合条件的文档)

多个:db.collection.find()
因为没有检索条件,就全部显示出
在这里插入图片描述
在混合写法中,默认为且条件

db.emp.find({name:"索隆",postion:"左副"});

在这里插入图片描述

db.emp.find({name:"索隆",postion:"船医"});

没有符合条件的数据就显示为零条。
在这里插入图片描述
单个:db.collection.findOne()或者db.collection.find(条件)
图示12行代码为检索符合条件,显示第一条数据。
图示13行代码为检索符合条件,显示第2条( [序数])数据。
在这里插入图片描述
值得注意的是find(返回的是数组),find返回的是对象,可通过打点调用的方式,返回数组大小或者对象属性。
在这里插入图片描述在这里插入图片描述

3、Update(修改符合条件的文档)

修改字段值:db.collection.update() //db.collection.updateMany()
在这里插入图片描述
我们想把这个“娜美”的性别变换为女性。
按照官方文档我们成功的将性别进行了更改。

db.emp.update(
    {name:"娜美"},
    {$set:{gender:"女"}}
);

在这里插入图片描述
如果我们没有写$set会发生以下情况。

db.emp.update({name:"娜美"},{gender:"女"});

在这里插入图片描述
看日志是成功了!
在这里插入图片描述
但实际人给弄丢了。
在这里插入图片描述

增加字段值:db.collection.update()
针对没有的字段,不用像Oracle新建,直接就可自动创建。
除了在update中增加字段,在insert时mongodb都会根据需要自动创建。因此扩展性强。

db.emp.update(
    {name:"索隆"},
    {$set:{dream:"第一大剑豪"} }
);

在这里插入图片描述
但值得注意的是,数据中有两个“索隆”,update与updateOne 都只是默认改第一个,不过可以使用。db.collection.updateMany()去修改多个,所有匹配的,都会更改,在此不再截图证明了。
但update实际是updateOne()与updateMany()的综合体
在官方文档中,update有很多属性,当使用update将multi设置为true时即可更改多条符合条件数据。
在这里插入图片描述
当我们执行以下指令:

db.emp.update(
    {gender:"男"},
    {$set:{describe:"可爱的憨憨"} },
    {multi:true}
);

会发现符合条件的数据都发生了变化!
在这里插入图片描述

4、Delete(修改符合条件的文档)

删除数据:
db.collection.deleteOne()
db.collection.deleteMany()
db.collection.remove()
在这里,deleteMany与remove的处理结果都是相同的都是符合条件所有数据

db.emp.deleteMany({name:"索隆"})

在这里插入图片描述
在这里插入图片描述

但是在remove属性,增加true条件会只删除一个,deleteone效果相同,官方文档有说明:
在这里插入图片描述

db.emp.remove(
    {name:"索隆"}true
)

但常同删除数据的方法,是将其中一个字段设置为isDel为1,当显示数据时显示isDel为0的数据,即可达成删除数据的目的。好处是任何删除的数据,都可还原,提高数据安全性。
在这里插入图片描述
删除集合
db.collection.remove()
db.collection.drop()
当使用:
db.emp.remove({});
db.emp.drop();
会将collection也删除掉
在这里插入图片描述
在这里插入图片描述
如果remove方法传入空对象,也会将集合删除
但处理过程为一条条删除,效率会很低,当真的需要删除时,可直接使用db.collection.drop()。

当然还有db.dropdatabase().删除数据库,除非你已经做好了删库跑路的准备。还有2020年2月24号的新闻,恶意删库犯罪人被判刑了两年,因此你们懂得!

三、结语:

感谢阅读文章,您的赞是对我的激励。如有错误请示作者改正,万分感谢。

认真做好每一件事,只为做个细心的人。

长大后发现时间流逝的真的很快。

有这样一个小故事: 曾国藩小时晚上背书,墙外有个小偷,就等呀等呀!等了很多个时辰,发现还没背完。最后小偷生气的一脚踹开门,当着曾国藩的面将他背诵的内容背诵了出来。
并羞辱的说道:你这么笨还浪费什么灯油。
但十年后,小偷仍旧是小偷,而曾国藩已经成了举世闻名的大人物!

时间不是用来流逝的,而是用来积累的。

加油!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值