MongoDB数据库CRUD(增删改查)的操作
(1)NoSQL 简介
NoSQL有时也称作Not Only SQL的缩写,意即"不仅仅是SQL"。
现代的计算网络,每天上都会产生大量数据。
这些数据大部分都是由关系性数据库系统(RDBMS)来管理的。
NoSQL用于超大规模数据的存储。
现在针对大数据处理以及高并发、高读写推荐使用,NoSQL被广泛应用。(例如国外的谷歌、Facebook。国内阿里、腾讯每天为用户收集万亿比特的数据)等,创业型公司很多使用。NoSQL无需多余操作就可以横向扩展。
(2)MongoDB三个概念
MongoDB的数据模型是面向文档的,简单理解 这个数据库中存的是各种各样的 JSON。(BSON)。
MongoDB属于NOSQL,了解mongodb需要先知道这三个名词代表含义。
- 数据库(database)
数据库是一个仓库,在仓库中可以存放集合。 - 集合(collection)
集合类似于数组,在集合中可以存放文档。
(类似于SQL中的表空间) - 文档(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号的新闻,恶意删库犯罪人被判刑了两年,因此你们懂得!
三、结语:
感谢阅读文章,您的赞是对我的激励。如有错误请示作者改正,万分感谢。
认真做好每一件事,只为做个细心的人。
长大后发现时间流逝的真的很快。
有这样一个小故事: 曾国藩小时晚上背书,墙外有个小偷,就等呀等呀!等了很多个时辰,发现还没背完。最后小偷生气的一脚踹开门,当着曾国藩的面将他背诵的内容背诵了出来。
并羞辱的说道:你这么笨还浪费什么灯油。
但十年后,小偷仍旧是小偷,而曾国藩已经成了举世闻名的大人物!
时间不是用来流逝的,而是用来积累的。
加油!