更新函数|学习笔记

简介: 快速学习更新函数

开发者学堂课程【快速掌握 MongoDB 数据库更新函数】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/400/detail/5192


更新函数

 

对于 MongoDB 而言,数据的更新基本上是一件很麻烦的事情,如果在实际的工作之中,真的具有此类的操作支持,记住,mongo 数据保存的是副本数据。

但是 mango 在设计的时候尽可能不想让它作为副本设计,最终的数据还是要保存在传统的关系型数据库里,但是 mango 就觉得应该存自己的数据。

但是从实际应用效果而言,一定是关系型数据库保存数据最好,如果关系型数据库保存的数据被变更了那么把 mango 的数据删掉重新插就可以了。

那么最好的做法:在 MongoDB 里面对于数据的更新操作提供了两类函数:

save( )

update( )

函数的基本使用

如果要修改数据最直接的使用函数就是 update()函数,但是这个函数的语法要求很麻烦:

语法: db.集合.update(更新条件,新的对象数据(更新操作符) ,upsert , multi);

-upsert:如果要更新的数据不存在, 则增加一条新的内容(true为增加、false 为不增加)

-multi:表示是否只更新满足条件的第一行记录,如果设置为 false,只更新第一条,如果是 true 全更新。

首先先写入:

db.students.find () .skip(0) .limit(5).sort( { "$natual":1}).pretty();

执行找出信息:

_id": objectId("5594ab1eeecd74894d19fff2""),

"name": 张三",

"sex" :“男,

"age” : 19,

score": 59

"address":“海淀区"

" _id" : objectId("5594ab1eeecd74894d19fff3""),

"name":“李四”,

sex" :“女”,

"age"" : 20,

score” : 59,_

address" :朝阳区"

"_id": objectId("5594ab1eeecd74894d19fff4""),

"name":"王五",

"sex” :“女”,

"age"" : 19,

score" : 99 ,

"address"" :“西城区"

可以看到19岁的现在成绩都不是100

范例:将年龄是19岁的人的成绩都更新为100分(此时会返回多条数据) 

如果是 true,不存在则增加,如果是 false则不增加。

l 只更新第一条数据:

db.students.update( { "age" : 19} , {"$set" :

{ "score":100} },false,false) ;

19岁成绩变化,注意成绩变化不能直接写,要跟上更新操作符也就是修改器。

执行返回结果1行。

结果:

_id": objectId("5594ab1eeecd74894d19fff2") ,

"name"" :张三”,

"sex" :男”,

age:19

score”100

"address"" :"海淀区"

"_id" : objectId("5594ab1eeecd74894d19fff3"") ,

"name" :“李四”,

"sex :“女”,

"age"" : 20,

Score: 59

address":“朝阳区

_id”: objectId(5594ab1eeecd74894d19fff4"") ,

"name":“王五”,

sex” :“女”,

"age": 19,

"score“:99

address"“西城区”

只更新了第一条数据,其他19岁没有发生改变。

l 所有满足条件的数据都更新。

db.students.update( {"age" : 19} , {"$Sset" :

{ "score":100} },false,true) ;

执行结果12行,更新了11行。

结果:

"_id": objectId("5594ab1eeecd74894d19fff5""),

"name"" :赵六”,

sex":“男,

"age"" : 20,

"score" : 100,

address"” :东城区"

"_id": objectId("5594ab1eeecd74894d19fff6""),

"name"":孙七",

"sex” :男,

"age"" : 19,

""score" : 100,.

"address" :"海淀区"

这是更新存在数据。

范例:更新不存在的数据

db.students.update( { "age": 30} , {"$set" : { "name": "不存在"} },true,false) ;    

//建议加上双引号 ,true表示如果数据不存在则增加。

执行:

Wri teResult( {

nMatched":0 ,

"nUpserted" : 1,

"nModified” :0 ,

"_id": objectId(5594d03e88427da6d2fd535a")

})

匹配数据为0,修改数据为0。

由于没有年龄是30岁的学生信息,所以此时相当于进行了数据的创建,取决于创建的原因是 true。

Update操作里面有一个最麻烦的东西:$set,整个 update 过程之中它是修改器,现在只修改数据用到了$set

但是严格来讲,不仅内容能够修改,连集合结构也可以改,因为它是无模式的。

那么除了 update( )函数之外,还提供有一个 save()函数,这个函数的功能与更新不存在的内容相似。

范例:使用 save( )操作db.students.save(i"_id":ObjectId("5594d0f1eecd74894d1a0002"), " age":50})db.students.save(i"_id":ObjectId("5594d0f1eecd74894d1a0002"),表示需要修改的数据 id。

执行:

uriteResu1t({

"nMatched" : 1,

"nUpserted" : 0,

"nModified" :1

})

匹配1条,修改1条。

由于此时对应的id数据存在了,所以就变为了更新操作。

但是如果要保存的数据不存在(不能保存有“_id"),那么就变为了增加操作。

Save( )操作并不好用,因为 update()过程编写、更新、插入或更加好用一点,而save()操作在写的时候需要找到数据id。

所以只需要知道 save()能更新、保存,update()也能更新、保存就可以了。

相关文章
|
10月前
|
Java 数据库连接 开发者
Java中的异常处理机制:深入解析与最佳实践####
本文旨在为Java开发者提供一份关于异常处理机制的全面指南,从基础概念到高级技巧,涵盖try-catch结构、自定义异常、异常链分析以及最佳实践策略。不同于传统的摘要概述,本文将以一个实际项目案例为线索,逐步揭示如何高效地管理运行时错误,提升代码的健壮性和可维护性。通过对比常见误区与优化方案,读者将获得编写更加健壮Java应用程序的实用知识。 --- ####
|
存储 SQL 关系型数据库
(四)MySQL之索引初识篇:索引机制、索引分类、索引使用与管理综述
本篇中就对MySQL的索引机制有了全面认知,从索引的由来,到索引概述、索引管理、索引分类、唯一/全文/联合/空间索引的创建与使用等内容,进行了全面概述。
520 0
|
JavaScript 前端开发 安全
解锁Vue3与TypeScript的完美搭档:getCurrentInstance带你高效打造未来前端
【8月更文挑战第21天】Vue3的getCurrentInstance方法作为Composition API的一部分,让开发者能在组件内访问实例。结合TypeScript,可通过定义组件实例类型实现更好的代码提示与类型检查,提升开发效率与代码质量。例如,定义一个带有特定属性(如myData)的组件实例类型,可以在setup中获取并安全地修改这些属性。这种方式确保了一致性和减少了运行时错误,使开发更加高效和安全。
433 0
|
程序员 编译器 C#
C#变量命名规则
C#变量命名规则
191 0
|
JavaScript 前端开发
js常用属性
js常用属性
97 0
|
设计模式 uml
设计模式学习心得之前置知识 UML图看法与六大原则(下)
设计模式学习心得之前置知识 UML图看法与六大原则(下)
134 2
|
Java Docker 容器
docker-compose部署一个springboot项目(包含环境)
docker-compose部署一个springboot项目(包含环境)
563 0
|
存储 NoSQL Redis
零基础手把手带你阅读Redis源代码系列-ZSet底层原理详解(跳表SkipList)
>之前就说了要来西索Redis,现在来辣! >本文的部分内容参考自《小林Coding》,部分地方根据源代码进行剖析。 >Redis源码地址:https://github.com/redis/redis.git
343 0
零基础手把手带你阅读Redis源代码系列-ZSet底层原理详解(跳表SkipList)
|
索引
06Lucene索引库的删除
06Lucene索引库的删除
84 0
word文档如何从第三页开始设置页码详细解决方案
word文档如何从第三页开始设置页码详细解决方案
292 0
word文档如何从第三页开始设置页码详细解决方案