更新文档

使用update方法更新文档。update方法有两个参数,一个是查询文档,定位需要更新的目标文档,另一个是修改器文档,用于对目标文档进行更新修改。

更新操作不可分割,若同时进行两个更新,先到达服务器的先执行。

1、文档替换:未使用修改器,新文档完全替换目标文档。

python对mongodb数据进行修改 mongodb怎么修改数据_数组


如果update第一个参数查询文档匹配到多个文档,当对文档中的某一个文档进行更新,容易导致主键冲突,最好确保总是指定一个唯一文档:

python对mongodb数据进行修改 mongodb怎么修改数据_字段_02


为了避免这种情况,最好总是指定一个唯一文档。可以使用_id来进行查询目标文档。更新修改器

作为一种特殊的键,主要对文档中的部分字段进行修改。使用修改器时,_id值不能改变,其他键值都可以更改。

1、”$set”修改器

用来指定一个值,如果该字段不存在,则创建它。

python对mongodb数据进行修改 mongodb怎么修改数据_update_03


2、”$unset”修改器

删除匹配的目标文档中特定的键值。

python对mongodb数据进行修改 mongodb怎么修改数据_字段_04


也可以使用{“$unset”:{name:1}}

python对mongodb数据进行修改 mongodb怎么修改数据_mongodb_05


修改内嵌文档:

python对mongodb数据进行修改 mongodb怎么修改数据_删除元素_06

3、”$inc”修改器

用来增加已有键的值,该键不存在就创建一个。专门用来增加或减少数值。只能用于整形、长整型或双精度浮点型的值。

python对mongodb数据进行修改 mongodb怎么修改数据_数组_07


不能用于null、布尔类型和字符串类型。4、”$push”数组修改器

如果数组存在,会在已有数组末尾加入一个元素,否则,创建一个新数组:

python对mongodb数据进行修改 mongodb怎么修改数据_字段_08


如果想插入多个文档,插入一个内嵌数组:

python对mongodb数据进行修改 mongodb怎么修改数据_mongodb_09


避免产生内嵌数组,可以使用 “$each”修改器,将每一个值都放到数组中:

python对mongodb数据进行修改 mongodb怎么修改数据_字段_10

配合使用 “$slice” 可以取出固定长度的数组,保证数组不会超出设定的范围,它的值是负数代表最后加入的元素,为正整数代表前面的元素。

取最后10个数,不足的话就取所有的值:

python对mongodb数据进行修改 mongodb怎么修改数据_mongodb_11


取前面5个值:

python对mongodb数据进行修改 mongodb怎么修改数据_字段_12

还可以使用 “$sort” 对插入的数组元素进行排序:

python对mongodb数据进行修改 mongodb怎么修改数据_删除元素_13

注意:不能只将 “$slice”或者 “$sort”与 “$push”配合使用,,必须使用 “$each” 。

python对mongodb数据进行修改 mongodb怎么修改数据_字段_14

5、”$addToSet”修改器

保证数组内的元素不会重复:

python对mongodb数据进行修改 mongodb怎么修改数据_数组_15

可以与”$each”配合使用,插入不同的值:

python对mongodb数据进行修改 mongodb怎么修改数据_mongodb_16

6、”$pop”修改器

把数组看做队列或栈,该修改器可以从数组任何一端删除元素。

{“$pop”:{“key”:1}}从数组末尾删除元素,{“$pop”:{“key”:-1}}从头部删除元素:

python对mongodb数据进行修改 mongodb怎么修改数据_mongodb_17

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

python对mongodb数据进行修改 mongodb怎么修改数据_删除元素_18

小技巧:对数组中的某个值进行修改,可以通过位置或者定位符(“$”):

a、通过位置,修改数组中第一个文档中评论的内容:

python对mongodb数据进行修改 mongodb怎么修改数据_数组_19


b、使用定位符”$”

这样不必预先知道元素的下标,它是根据查询文档的位置来进行定位,所以查询文档要定位到数组中具体哪一个元素,而不是外围文档:

python对mongodb数据进行修改 mongodb怎么修改数据_字段_20


定位符如果查询文档匹配多个结果,那么只有第一个元素会被修改更新。三、upsert

要是没有找到符合更新条件的文档,就会以这个条件和更新文档为基础创建一个新的文档。如果找到了,那就正常更新。

将update()方法的第三个参数设置为true,就表示upsert。

python对mongodb数据进行修改 mongodb怎么修改数据_mongodb_21

“$setOnInsert”:第一次创建字段的值,以后的更新中值不再改变。

python对mongodb数据进行修改 mongodb怎么修改数据_mongodb_22

七、save()函数

如果文档不存在,它会自动创建文档(调用insert),如果文档存在,它就更新该文档(调用upsert),它的参数 就是一个文档。

python对mongodb数据进行修改 mongodb怎么修改数据_删除元素_23

更新多个文档

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

python对mongodb数据进行修改 mongodb怎么修改数据_删除元素_24

补充:

1、updateOne():更新第一个匹配的文档:

python对mongodb数据进行修改 mongodb怎么修改数据_字段_25