MongoEngine - Atomics更新


Atomics性是 ACID 事务属性之一。数据库事务必须是不可分割和不可简化的,以便它要么完全发生,要么根本不发生。这个属性称为Atomics性。MongoDB 仅支持单个文档的Atomics性,而不支持多文档事务。

MongoEngine 提供以下方法用于查询集的Atomics更新。

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

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

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

这些方法可以使用以下修饰符。(这些修饰符位于字段之前,而不是之后)。

设置一个特定值
未设置 删除特定值
公司 将值增加给定量
十二月 将值减少给定量
将值附加到列表中
推送全部 将多个值附加到列表中
流行音乐 根据值删除列表的第一个或最后一个元素
从列表中删除一个值
全部拉动 从列表中删除多个值
添加到集合 仅当列表中尚不存在时才将值添加到列表中

下面是一个Atomics更新的例子,我们首先创建一个名为tests的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')

Push 修饰符用于在 ListField(分数)中添加数据。

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

要将 attempts 字段加一,我们可以使用 inc 修饰符。

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

更新后的文档如下所示 -

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