修改器|学习笔记

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 快速学习修改器

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

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


修改器

 

MongoDB 数据库而言,数据的修改会牵扯到内容的变更、结构的变更(包含有数组),所以在进行 MongoDB 设计的时候就提供有一系列的修改器的应用,之前使用的“$set”就是一个修改器。

一共提供了十种修改器,接下来学习各个修改器的含义:

1、$inc:

主要针对于一个数字字段,增加某个数字字段的数据内容;

语法:{ "$inc" :{"成员":内容}}

范例:将所有年龄为19岁的学生成绩一律减少30分,年龄加一岁

db.students.update( { "age" : 19} , {"$inc" : { "score" : -30 , " age" : 1}}) ;

结果:

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

"name" :“王五”,

"sex" :女",

"age" : 20,

score" : 70,

"address" :“西城区"

"_id": 0bjectId("5594ab1eeecd74894d19fff5""),

"name":"赵六”,

"sex"" :“男",

age” : 20,

"score"" : 100,

"address" :东城区"

可以看到成绩是70的,年龄都改变了,

2、$set:

进行内容的重新设置;·

语法:{"$set": 成员":"新内容"}};

范例:将年龄是20岁的人的成绩修改为89.

db.students.update( { "age" : 20}, {"$set" : {"score" : 89}}) ;

执行成功,只要执行出现了匹配个数和修改个数就表明成功了。

既然能设置内容,那么也能删除内容:

3、$unset:

除某个成员的内容;

语法:"$unset" : 成员":1}}  //1 表示删除的意思

范例:删除“张三”的年龄与成绩信息。

db.students.update( {"name" : "张三"},{"Sunset" : { "age" : 1, "score”: 1}});

结果:

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

name"" : 张三",

"sex” :男,

"address"“海淀区"

id" : ObjectId( 5594ab1eeecd74894d19fff3""),

"name"":“李四”,

""sex" :女”,

age"" : 20,

score" : 59,

address" :“朝阳区"

执行后指定的成员内容就消失了。

4、Spush:

相当于将内容追加到指定的成员之中(基本上是数组);

语法:$ i{"$push" :{成员: value} }.  //value 基本上只能是数组,如果数组不存在再去改变。

范例:向“张三”添加课程信息(此时张三信息下没有course信息)。

db.students.update( {"name": "张三"},{"$push" : {"course" :"语文"“数学”}});

执行:

_id:objectId("5594ab1eeecd74894d19fff2"") ,

"name":张三",

sex:"男"

address":“海淀区",

course”: [

[

语文",

“数学”

]

]

结果成了数组了,也就是说加的内容本身就是追加一个新的字段,新的字段是一个数组,这里有两个中括号,事实上现在的过程确实有数组,但是这个数组里面只能增加一个数据,比如:

范例:向“李四”添加课程信息(此时张三信息下没有course信息)。

db.students.update( {"name": "李四"},{"$push" : {"course" :"语文"}});

写完后在上方查询的地方跟上李四。

执行:

_id”: 0bjectId("5594ab1eeecd74894d19fff3")

"name": 李四”,

"sex"":“女",

age"" : 20,

score:59.

address":朝[阳区",

"course"":【

"语文

]

李四现在没有数据,那么就找一个有数据的:

范例:向“谷大神–E”里面的课程追加一个“美术”,

db.students.update( {"name": "谷大神 -E"}, {"$push" : { "course":"美术"});

$push 就是进行数组数据的添加操作使用的,如果没有数组则进行一个新的数组的创建,如果有则进行内容的追加。

结果:

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

"name"":谷大神-E",

"sex” :“男,

"age" : 20,

score” : r0:.山

address":海淀区”,

"course": [

“语文",

"政治”,

美术”

]

5、$pushAll:

与“$push”是类似的,可以一次追加多个内容到数组里面;

语法:$ {"$pushAl1":{成员:数组内容}}

范例:向“王五”的信息里面添加多个课程内容

db.students.update( { "name" : "王五"}, {"$pushALL" : { "course":["美术","音乐",'素描"}})  //注意大小写

结果:

"_id": 0bjectId("5594ab1eeecd74894d19fff4"") ,

name":“王五”,

"sex"" :“女”,

age"" : 20,

score" : 70,

address"" :西城区,

course"": [

"美术

音乐",

“素描"

]

6、$addToSet:

向数组里面增加一个新的内容,只有这个内容不存在的时候才会增加

语法:"$addToSet":{成员:内容}}}

范例:向王五的信息增加新的内容

db.students.update( { "name" : "王五"}, {"SaddToSet" : { "course": "舞蹈"});

此时会判断要增加的内容在数组里面是否已经存在了,如果不存在则向数组之中追加内容,如果存在,则不做任何的修改操作。

结果:

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

name":“王五”,

"sex” :"女”,

"age" : 20,

score”: 70,,

"address” :西城区",

"course":【

“美术",

音乐",

素描",[

"美术

"音乐

素描",

”跳舞"

”跳舞"

7、$pop:

删除数组内的数据;“

·语法:{"$pop":{成员:内容}

内容如果设置为-1表示删除第一个

如果是1表示删除最后一个。

范例:删除王五的第一个课程。

db.students.update( { "name": "王五"},{"Spop" : { "course" : -1}});

范例:除王五的最后一个课程

db.students.update( { "name" : "王五"},{"$pop" : { "course" : 1}});

结果:

_id"

: objectId( "5594ab1eeecd74894d1Sfff4"") ,

""name": 王五"”,

sex":“女",

age"" : 20,

"score” :70..

address""_:“西城区”,

"course"":

“音乐",

“素描"";[

:美术",

音乐",

"素描”,

跳舞"

这个过程就相当于数组里删除。

8、$pull:

从数组内删除一个指定内容的数据

·语法:{"$pull":{成员:数据}

进行数据比对的,如果是此数据则删除:

范例:删除王五学生的音乐课程信息

db.students.update( { "name": "王五"},{"Spull" : { "course": "音乐"}});

执行:

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

"name":王五”,

"sex” :“女”,

age": 20,

“score” :70,

"address":“西城区”,

"course"" :[

素描"

]

相当于做一个值的判断,如果数组太多删不完:

9、$pullAll:

一次性删除多个内容;“

语法:{"$pull":{成员:[数据,数据,...]}}   //多个数据都用数组表示

范例:删除“谷大神-A”中的三门课程

db.students.update(  "name" : "谷大神 -A"} ,{"$pullAll" : {"course":["语文","数学","英语"]}});

结果:

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

"name":“谷大神- A"",

"sex"":男,

age" : 20,

score"": 70,...

address” :“海淀区”,

"course"" [

“音乐",

"政治"

1o、$rename:

为成员名称电命名;

语法:{"$rename" : {旧的成员名称:新的成员名称};

范例:将“张三”name成员名称修改为“姓名”.

db.students.update( { "name": "张三"}, {"$rename" : { "name": "姓名"}})

在整个 MongoDB 数据库里面,提供的修改器的支持很到位。

结果:

"_id”: 0bjectId( "5594ab1eeecd74894d19fff2""),

"sex"":男",.

"address":“海淀区”,

"course": [

[

"语文",

"数学

]

],.

“姓名”:"张三

强烈建议:MongoDB保存的时候别用内线文档,也别用数组,就保存基本数据就可以。

因为 MongoDB 设计的时候就是按照能独当一面的设计,但在使用时,它只是一个附加的数据库,供数据查询使用。

相关文章
|
机器学习/深度学习 分布式计算 算法
Spark快速大数据分析PDF下载读书分享推荐
《Spark快速大数据分析》适合初学者,聚焦Spark实用技巧,同时深入核心概念。作者团队来自Databricks,书中详述Spark 3.0新特性,结合机器学习展示大数据分析。Spark是大数据分析的首选工具,本书助你驾驭这一利器。[PDF下载链接][1]。 ![Spark Book Cover][2] [1]: https://zhangfeidezhu.com/?p=345 [2]: https://i-blog.csdnimg.cn/direct/6b851489ad1944548602766ea9d62136.png#pic_center
371 1
Spark快速大数据分析PDF下载读书分享推荐
|
SQL 弹性计算 安全
ECS权益问题之学生权益无法续费如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
6月前
|
SQL Oracle 数据库
这款免费数据库工具,可能是YashanDB图形化管理的最佳选择
DBeaver for YashanDB 是一款专为国产自研数据库 YashanDB 定制的图形化管理工具,基于全球流行的开源数据库工具 DBeaver 二次开发而成。它深度适配 YashanDB 的各种架构,支持 HEAP/LSC 多形态表管理和 Oracle 生态兼容,提供高效的对象管理、智能 SQL 开发和工业级 PL/SQL 调试功能。通过可视化操作,开发者可轻松完成物化视图配置、存储过程管理等复杂任务,大幅提升效率。该工具完全免费,支持多平台,为企业级数据库管理提供了成熟解决方案。
|
10月前
|
算法 Linux
深入探索Linux内核的内存管理机制
本文旨在为读者提供对Linux操作系统内核中内存管理机制的深入理解。通过探讨Linux内核如何高效地分配、回收和优化内存资源,我们揭示了这一复杂系统背后的原理及其对系统性能的影响。不同于常规的摘要,本文将直接进入主题,不包含背景信息或研究目的等标准部分,而是专注于技术细节和实际操作。
|
网络协议 Java
Java UDP通信详解
UDP(User Datagram Protocol)是一种无连接的网络传输协议,它不像TCP那样需要建立连接和维护状态,因此更加轻量级。UDP适用于那些对数据传输的实时性要求较高,可以容忍一定数据丢失的场景。本文将详细介绍Java中如何使用UDP协议进行网络通信,包括UDP套接字、数据传输、服务器和客户端的创建等。
303 0
|
PyTorch 算法框架/工具 Python
PyTorch 2.2 中文官方教程(九)(1)
PyTorch 2.2 中文官方教程(九)
228 0
PyTorch 2.2 中文官方教程(九)(1)
|
流计算
实时计算 Flink版操作报错之程序在idea跑没问题,打包在服务器跑就一直报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
前端开发 API Python
如何在Python中接收前端POST上传的文件
如何在Python中接收前端POST上传的文件
1197 2
|
安全 JavaScript Linux
PHPStorm常用快捷键
PHPStorm常用快捷键
346 0
|
机器学习/深度学习 人工智能 数据可视化
成为钢铁侠!只需一块RTX3090,微软开源贾维斯(J.A.R.V.I.S.)人工智能AI助理系统
梦想照进现实,微软果然不愧是微软,开源了贾维斯(J.A.R.V.I.S.)人工智能助理系统,贾维斯(jarvis)全称为Just A Rather Very Intelligent System(只是一个相当聪明的人工智能系统),它可以帮助钢铁侠托尼斯塔克完成各种任务和挑战,包括控制和管理托尼的机甲装备,提供实时情报和数据分析,帮助托尼做出决策等等。 如今,我们也可以拥有自己的贾维斯人工智能助理,成本仅仅是一块RTX3090显卡。
成为钢铁侠!只需一块RTX3090,微软开源贾维斯(J.A.R.V.I.S.)人工智能AI助理系统