app开发者平台在数字化时代的重要性与发展趋势解析
606
2022-11-22
初识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(
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~