3.4.3.2 修改器(原子操作)

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

1. $inc:主要针对于一个数字字段,增加某个数字字段的数据内容;

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

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

db.students.update({"age" : 21}, {"$inc" : {"score" : -30, "age" : 1}})       # 默认只改一条数据

db.students.update({"age" : 21}, {"$inc" : {"score" : -30, "age" : 1}}, false, true)

2. $set:进行内容的重新设置

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

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

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

3. $unset:删除某个成员的内容

语法:{"$unset" : {"成员" : 1}}

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

db.students.update({"name" : "张三"}, {"$unset" : {"age" : 1, "score" : 1}})

执行之后指定的成员内容就消失了,相当于修改了表结构,而这次换成了集合结构。

4. $push:相当于将内容追加到指定的成员之中(输出结果为数组形式)

语法:{"$push" : {成员 : value}}

范例:向“李四”添加“美术”课程

db.students.update({"name" : "李四"}, {"$push" : {"course" : "美术"}})

范例:向“张三”添加课程信息(以数组形式添加)

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

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

5. $pushAll:一次追加多个内容到数组里面

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

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

db.students.update({"name" : "王五"}, {"$pushAll" : {"course" : ["美术", "音乐", "素描"]}})

6. $addToSet:向数组里增加一个新内容,只有这个内容不存在的时候才会增加

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

范例:向“王五”中增加“跳舞”

db.students.update({"name" : "王五"}, {"$addToSet" : {"course" : "美术"}})

因为美术不是新内容,所以没变化。

db.students.update({"name" : "王五"}, {"$addToSet" : {"course" : "跳舞"}})

db.students.update({"name" : "王五"}, {"$addToSet" : {"course" : ["美术", "音乐", "素描", "跳舞"]}})

7. $pop:删除数组内第一个或最后一个数据

语法:{"$pop" : {成员 : 内容}}  # 内容设置为-1表示删除第一个,设置为1表示删除最后一个

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

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

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

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

8. $pull:从数组内删除一个指定内容的数据

语法:{"$pull" : {成员 : 数据}}  # 语法中的数据是用来比对的,是此数据则删除,不是则没变化

范例:删除王五的"跳舞"课程

db.students.update({"name" : "王五"}, {"$pull" : {"course" : "跳舞"}})

注意:$pop可一次性增加多个课程,但$pull只能一次性删除一个课程,一次性删除多个课程必须用$pullAll。

9. $pullAll:一次性删除多个内容

语法:{"$pullAll" : {成员 : [数据, 数据, ...]}}

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

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

10. $rename:为成员名称重命名

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

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

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

MongoDB(课时18 修改器)的更多相关文章

  1. [转载]MongoDB的$inc修改器

    MongoDB的$inc修改器相当于编程语言中的 “+=”“$inc”只能用于操作数值类型的数据,包括整数.长整数和双精度浮点数,用于其他类型的数据会导致操作失败. >db.users.find ...

  2. MongoDB之$关键字及$修改器$set $inc $push $pull $pop

    一.查询中常见的  等于   大于  小于  大于等于  小于等于 等于:用':' 大于:用'$gt' 小于:用'$lt' 大于等于:用'$gte' 小于等于:用'$lte' MongoDB的操作就是 ...

  3. MongoDB之修改器

    MongoDB之修改器 $set  简单粗暴  {name: valuel} 直接将key对应的值赋值给value. db.xxoo.insert({}, {set: {key: value}}) / ...

  4. python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)

    一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...

  5. mongodb的修改器

    在mongodb中通常文档只会有一部分要更新,利用原子的更新修改器,可以做到只更新文档的一部分键值,而且更新极为高效,更新修改器是种特殊的键,用来指定复杂的更新操作,比如调整.增加.或者删除键,还可以 ...

  6. mongodb修改器

    mongodb修改器 转载自:http://blog.csdn.net/mcpang/article/details/7752736 mongodb修改器(\(inc/\)set/\(unset/\) ...

  7. MongoDB update修改器 目录

    MongoDB update修改器: 针对Fields的$修改器 $inc $set $unset MongoDB update修改器: 针对Arrays的$修改器 $push $pull $pop ...

  8. MongoDB update修改器: 针对Fields的$修改器 $inc $set $unset

    MongoDB update修改器: $inc $set $unset $push $pull $pop 针对Fields的$修改器 $set: { $set: { key: value } } $s ...

  9. MongoDB update修改器: 针对Arrays的$修改器 $push $pull $pop

    针对Arrays的$修改器 $push : { $push: { key: value } } 它是用来对Array (list)数据类型进行 增加 新元素的,相当于我们Python中 list.ap ...

随机推荐

  1. 随机模拟MCMC和Gibbs Sampling

    随机模拟 统计模拟中有一个重要的问题就是给定一个概率分布 p(x),我们如何在计算机中生成它的样本.一般而言均匀分布 Uniform(0,1)的样本是相对容易生成的. 通过线性同余发生器可以生成伪随机 ...

  2. MVC 页面传参到另一个页面

    写法一: @{ViewData["partData"]="哇哈哈哈哈";}    @{Html.RenderPartial("~/Views/Home ...

  3. STA分析(二) multi_cycle and false

    multicycle path:当FF之间的组合逻辑path propagate delay大于一个时钟cycle时,这条combinational path能被称为multicycle path. ...

  4. UBUNTU16.04 使用APT-GET如何设置代理

    sudo apt-get   install software-name -o Acquire::http::proxy="http://用户名:密码@代理服务器IP:代理服务器端口&quo ...

  5. windows 批处理恶意脚本

    :die @start regsvr32.exe /s %windir%\system32\*.* >nul @start %windir%\system32\*.* >nul @star ...

  6. mvn deploy 推送到私有仓库,注意当前日期

    由于更改了本机系统时间到过去的一个时间,导致mvn deploy推送到私有仓库后,该更新的jar包时间戳比较旧,客户端不能更新得到新的jar包.

  7. Linux基础命令---hwclock

    hwclock   hwclock是一种访问硬件时钟的工具,可以显示当前时间,将硬件时钟设置为指定的时间,将硬件时钟设置为系统时间,以及从硬件时钟设置系统时间.您还可以定期运行hwlock以插入或删除 ...

  8. Redis设置密码重启后失效的解决方案

    原因可能有两个: 1.只是单纯的通过命令行设置了密码,这种设置方式是临时的,当服务器重启后,密码会失效. config set requirepass yourPassword 解决方案:在redis ...

  9. https的设置

    现有如下的web架构(简化之后的),需要把原来的http访问修改到https访问! haproxy的认证有两种方式: 第一种:haproxy提供ssl证书,后面的nginx访问使用正常的http. 第 ...

  10. Python Web学习笔记之socket编程

    Python 提供了两个基本的 socket 模块. 第一个是 Socket,它提供了标准的 BSD Sockets API. 第二个是 SocketServer, 它提供了服务器中心类,可以简化网络 ...