- 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"}]
}
廣告