MongoDB增删改操作(二)

更新文档
使用update方法更新文档。update方法有两个参数,一个是查询文档,定位需要更新的目标文档,另一个是修改器文档,用于对目标文档进行更新修改。
更新操作不可分割,若同时进行两个更新,先到达服务器的先执行。
1、文档替换:未使用修改器,新文档完全替换目标文档。
这里写图片描述
如果update第一个参数查询文档匹配到多个文档,当对文档中的某一个文档进行更新,容易导致主键冲突,最好确保总是指定一个唯一文档:
这里写图片描述
为了避免这种情况,最好总是指定一个唯一文档。可以使用_id来进行查询目标文档。

更新修改器
作为一种特殊的键,主要对文档中的部分字段进行修改。使用修改器时,_id值不能改变,其他键值都可以更改。
1、”$set”修改器
用来指定一个值,如果该字段不存在,则创建它。
这里写图片描述
2、”$unset”修改器
删除匹配的目标文档中特定的键值。
这里写图片描述
也可以使用{“$unset”:{name:1}}
这里写图片描述
修改内嵌文档:
这里写图片描述

3、”$inc”修改器
用来增加已有键的值,该键不存在就创建一个。专门用来增加或减少数值。只能用于整形、长整型或双精度浮点型的值。
这里写图片描述
不能用于null、布尔类型和字符串类型。

4、”$push”数组修改器
如果数组存在,会在已有数组末尾加入一个元素,否则,创建一个新数组:
这里写图片描述
如果想插入多个文档,插入一个内嵌数组:
这里写图片描述
避免产生内嵌数组,可以使用 “$each”修改器,将每一个值都放到数组中:
这里写图片描述

配合使用 “$slice” 可以取出固定长度的数组,保证数组不会超出设定的范围,它的值是负数代表最后加入的元素,为正整数代表前面的元素。
取最后10个数,不足的话就取所有的值:
这里写图片描述
取前面5个值:
这里写图片描述

还可以使用 “$sort” 对插入的数组元素进行排序:
这里写图片描述

注意:不能只将 “$slice”或者 “$sort”与 “$push”配合使用,,必须使用 “$each” 。
这里写图片描述

5、”$addToSet”修改器
保证数组内的元素不会重复:
这里写图片描述

可以与”$each”配合使用,插入不同的值:
这里写图片描述

6、”$pop”修改器

把数组看做队列或栈,该修改器可以从数组任何一端删除元素。
{“$pop”:{“key”:1}}从数组末尾删除元素,{“$pop”:{“key”:-1}}从头部删除元素:
这里写图片描述

“$pull”修改器可以根据指定的条件删除数组中的元素,而不是根据首尾位置,它会将所有匹配条件的元素都删除,而不是删除一个:
这里写图片描述

小技巧:对数组中的某个值进行修改,可以通过位置或者定位符(“$”):
a、通过位置,修改数组中第一个文档中评论的内容:
这里写图片描述
b、使用定位符”$”
这样不必预先知道元素的下标,它是根据查询文档的位置来进行定位,所以查询文档要定位到数组中具体哪一个元素,而不是外围文档:
这里写图片描述
定位符如果查询文档匹配多个结果,那么只有第一个元素会被修改更新。

三、upsert
要是没有找到符合更新条件的文档,就会以这个条件和更新文档为基础创建一个新的文档。如果找到了,那就正常更新。
将update()方法的第三个参数设置为true,就表示upsert。
这里写图片描述

“$setOnInsert”:第一次创建字段的值,以后的更新中值不再改变。
这里写图片描述

七、save()函数
如果文档不存在,它会自动创建文档(调用insert),如果文档存在,它就更新该文档(调用upsert),它的参数 就是一个文档。
这里写图片描述

更新多个文档
默认情况下,只能对符合查询文档的第一个文档执行更新操作,其他文档不会发生变化。要更新所有匹配的文档,将update()方法的第4个参数设置为true.
这里写图片描述

补充:
1、updateOne():更新第一个匹配的文档:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值