企业在数字化转型中如何利用常用前端框架提高开发效率并确保安全合规?
620
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~