初识Mongdb之数据更新篇

网友投稿 606 2022-11-22

初识Mongdb之数据更新篇

初识Mongdb之数据更新篇

目录

​​数据更新​​

​​数据如何更新?​​

​​MySQL更新案例​​

​​Mongdb更新案例​​

​​方法一:​​

​​方法二(推荐):​​

​​总结​​

​​每文一语​​

数据更新

数据如何更新?

我们都知道在MySQL里面经常用到数据的查询,但是在MySQL里面还有一个特别重要的就是数据更新,为了保证数据的实时准确,我们需要设计模式达到自动模式,这样就不会是简单的手动的操作了。同样的道理,在mongdb里面,数据更新也是一个比较重要的部分,它的更新语法和MySQL有一些小的差异,下面我们来看看具体的操作吧。

MySQL更新案例

在MySQL里面的更新语法我们来回忆一下:

UPDATE 表名 SET 原值1=新值1, 原值2=新值2 定位条件

UPDATE tb_student SET GENDER='女' WHERE ID='2019888888';

Mongdb更新案例

思想永远是一样的,在MySQL里面的更新语法虽然和mongdb不太一样,但是:思路都是一样的,首先我们来看看它的语法:

db.collection.update( , , { upsert: , multi: , writeConcern: })

query : update的查询条件,类似sql update查询内where后面的。

update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

writeConcern :可选,抛出异常的级别。

注意:我们知道在MySQL里面中文变量是不允许的,但是在mongdb里面是支持的,所以我们作为初学者,可以使用中文变量来方便我们更好的理解

首先我们插入一条记录作为我们的训练集:

var wxw = { "name": "王小王", "gender": 1, "height": 162, "phone": "15902333748", "role": "student", "sno": 2019999999, "major": "应用统计", "grade": 2019, "class": 4, "courses": [ { "course": "网络操作系统", "credit": 2, "score": 99 }, { "course": "大数据分析与内存计算", "credit": 4, "score": 88 } ]};db.students.insertOne(wxw);db.students.find({sno:2019999999});

这种方式是不可行的,因为更新文档会覆盖原来的信息

// 修改王小王同学的身高为199var 查询条件 = {role:"student",name:"王小王"} ;var 更新文档 = {height:199} ; //如果不包含操作符,那么就是完全覆盖的替换,慎用!// var 更新文档 = wxw;var 更新选项 = {} ;db.students.update(查询条件,更新文档,更新选项);db.students.find(查询条件);

方法一:

修改方法一:直接修改本地内存数据,然后上传到数据中心可以达到这个效果

wxw.height=199wxw

result = db.students.find({sno:2019999998});

我们发现数据源根本没有变化,只是内存数据变化了,那么我们就会有一个想法:把内存数据覆盖到元数据地址,那么就可以达到效果了

// 修改方法一:先查询出整个文档,在本地修改好了之后,再上传回数据库// 1. 查出原始文档use cqust;var 查询条件1 = {role:"student",name:"王小王"} ;var wxw = db.students.find(查询条件1);// 2. 本地修改查询出的文档wxw.height=123;var 更新文档 = wxw;// 3. 将本地修改好的文档作为更新文档,上传数据库进行更新db.students.update(查询条件1,更新文档,更新选项);db.students.find(查询条件1);

方法二(推荐):

// 修改方法二,使用$set操作符来构建更新操作文档var 查询条件={name:"王小王"};var 更新操作文档 = {$set:{weight:66}}; // 新增或者修改文档字段var 更新选项 = {} ;db.students.update(查询条件,更新操作文档,更新选项);db.students.find(查询条件);

直接修改了weight,因为之前不存在这个字段(如果不存在就新增,存在就会覆盖)

如果我们要把一个字段名删除,然后再去构造一个新的字段名来达到更新的效果一个怎么去做?看案例操作:

// 更新文档:删除字段和插入字段db.students.update({"name": "王小王","gender": 1},{$unset:{"height":1},$set:{"body":{"height": 162, "weight":66}}})var query = {"name": "王小王","gender": 1}var updateOp = { $unset:{"height":1}, $set:{"body":{"height": 162, "weight":66}} };db.students.update(query, updateOp)

使用$unset:{"字段名":1}删除

使用$set:{"新字段名":1111} 也可以嵌套多层结构,例如上述案例

修改一个不存在文档

var query = {"name": "刘王宇","gender": 1}var upOperation = { $unset:{"height":1}, $set:{"body":{"height": 162, "weight":66}} };var upOption = {upsert:1}//如果不存在这个文档,就会进行相关的增加操作var result = db.students.update(query, upOperation,upOption)db.students.find({"name": "刘王宇"})

总结

对于更新文档操作:我们可以使用修改本地内存数据再去上传最后达到修改效果,也可以使用update方法里面:查询,更新,更新选项,进行操作

个人推荐第二种方法,因为具有可执行性,如果你钟爱第一种也是可以的

- {$set:{字段:值}} 新增或者修改字段      - {$unset:{字段:""}  删除字段

- var upOption = {upsert:1} 如果不存在这个文档,就会进行相关的增加操作,如果没有这个选项那么如果不存在就不会进行增加操作!

每文一语

做一朵只为自己盛开的花,在无声中绽放,静静地欣赏!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python绘制漏斗图之可视化神器pyecharts
下一篇:Python绘制K线图之可视化神器pyecharts
相关文章

 发表评论

暂时没有评论,来抢沙发吧~