- MongoEngine 教程
- MongoEngine - 首页
- MongoEngine - MongoDB
- MongoEngine - MongoDB Compass
- MongoEngine - 对象文档映射器 (Object Document Mapper)
- MongoEngine - 安装
- MongoEngine - 连接到MongoDB数据库
- MongoEngine - 文档类
- MongoEngine - 动态模式
- MongoEngine - 字段
- MongoEngine - 添加/删除文档
- MongoEngine - 数据库查询
- MongoEngine - 过滤器
- MongoEngine - 查询操作符
- MongoEngine - QuerySet 方法
- MongoEngine - 排序
- MongoEngine - 自定义 Query Sets
- MongoEngine - 索引
- MongoEngine - 聚合
- MongoEngine - 高级查询
- MongoEngine - 文档继承
- MongoEngine - 原子操作更新
- MongoEngine - Javascript
- MongoEngine - GridFS
- MongoEngine - 信号
- MongoEngine - 文本搜索
- MongoEngine - 扩展
- MongoEngine 有用资源
- MongoEngine - 快速指南
- MongoEngine - 有用资源
- MongoEngine - 讨论
MongoEngine - 原子操作更新
原子性是ACID事务属性之一。数据库事务必须是不可分割且不可约分的,以便它要么完全发生,要么根本不发生。此属性称为原子性。MongoDB 仅支持单文档的原子性,而不支持多文档事务。
MongoEngine 提供以下方法用于对 QuerySet 进行原子更新。
update_one() − 覆盖或添加查询匹配到的第一个文档。
update() − 对查询匹配到的字段执行原子更新。
modify() − 更新文档并返回它。
可以使用以下修饰符与这些方法一起使用。(这些修饰符位于字段之前,而不是之后)。
set | 设置特定值 |
unset | 删除特定值 |
inc | 将值增加给定数量 |
dec | 将值减少给定数量 |
push | 将值添加到列表中 |
push_all | 将多个值添加到列表中 |
pop | 根据值移除列表中的第一个或最后一个元素 |
pull | 从列表中移除值 |
pull_all | 从列表中移除多个值 |
add_to_set | 仅当值不在列表中时才将其添加到列表中 |
以下是一个原子更新的示例,我们首先创建一个名为 tests 的文档类并在其中添加一个文档。
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() 方法将 name 字段从 XYZ 更新为 MongoDB。
tests.objects(name='XYZ').update_one(set__name='MongoDB')
push 修饰符用于向 ListField (scores) 中添加数据。
tests.objects(name='MongoDB').update_one(push__scores=50)
要将 attempts 字段加 1,可以使用 inc 修饰符。
tests.objects(name='MongoDB').update_one(inc__attempts=1)
更新后的文档如下所示:
{ "_id":{"$oid":"5ebcf8d353a48858e01ced04"}, "name":"MongoDB", "attempts":{"$numberInt":"1"}, "scores":[{"$numberInt":"50"}] }
广告