初识Mongdb之数据更新篇

MongoDB语法从入门到实践 专栏收录该内容
9 篇文章 1 订阅

目录

数据更新

数据如何更新?

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>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

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});

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

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

db.students.update(查询条件,更新文档,更新选项);
db.students.find(查询条件);

 

方法一:

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

wxw.height=199
wxw

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} 如果不存在这个文档,就会进行相关的增加操作,如果没有这个选项那么如果不存在就不会进行增加操作!

 

每文一语

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

  • 6
    点赞
  • 0
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值