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类,并在其中添加一个文档。
让我们使用 update_one() 方法来更新XYZ的名字字段到MongoDB。
推动修改器用于在ListField(分数)中添加数据。
为了使尝试字段增加1,我们可以使用inc修改器。
更新后的文件看起来如下—