MongoEngine – 原子性更新

MongoEngine – 原子性更新

原子性是ACID事务属性之一。一个数据库事务必须是不可分割和不可还原的,所以它要么完全发生,要么根本就不发生。这个属性被称为原子性。MongoDB只支持单文档的原子性,不支持多文档的事务。

MongoEngine为queryset上的原子更新提供了以下方法。

update_one() - 覆盖或添加查询所匹配的第一个文档。

update() - 对查询所匹配的字段执行原子更新。

modify() - 更新一个文档并返回它。

以下修饰语可以与这些方法一起使用。(这些修饰语在字段之前,而不是之后)。

set 设置一个特定的值
set 删除一个特定的值
inc 将一个值按给定的数量递增
dec 以给定的金额递减一个值
push 将一个值追加到一个列表中
push_all 将多个值追加到一个列表中
pop 根据值的不同,删除列表中的第一个或最后一个元素
pull 从一个列表中删除一个值
pull_all 从一个列表中删除多个值
add_to_set 仅当其不在列表中时才将其添加到列表中。

下面是一个原子更新的例子,我们首先创建一个名为test的Document类,并在其中添加一个文档。

from mongoengine import *
con=connect('newdb')

class tests (Document):
   name=StringField()
   attempts=IntField()
   scores=ListField(IntField())

t1=tests()
t1.name='XYZ'
t1.attempts=0
t1.scores=[]
t1.save()

让我们使用 update_one() 方法来更新XYZ的名字字段到MongoDB

tests.objects(name='XYZ').update_one(set__name='MongoDB')

推动修改器用于在ListField(分数)中添加数据。

tests.objects(name='MongoDB').update_one(push__scores=50)

为了使尝试字段增加1,我们可以使用inc修改器。

tests.objects(name='MongoDB').update_one(inc__attempts=1)

更新后的文件看起来如下—

{
"_id":{"oid":"5ebcf8d353a48858e01ced04"},
"name":"MongoDB",
"attempts":{"numberInt":"1"},
"scores":[{"$numberInt":"50"}]
}

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程