2

私はmongoengineを使用していますが、潜在的な競合状態のインシデントに遭遇しているようです。簡単な例として、次のようなコードがあります

def changeModel(newitemL, olditemD)
    model.randomList.append(newitemL)
    model.randomDict.pop(olditemD,None)
    model.save()

そのため、2 人のユーザーが異なるアイテムでこのアクションを実行しようとすると、保存されたモデルに対する 1 人のユーザーの変更のみが表示されることがあります。これを避けるために、ListFields と DictFields をアトミックに変更する方法はありますか?

4

1 に答える 1

2

保存を行う代わりに、代わりに更新を行う方が良いでしょう:

model.update(push__randomList=newitemL, pop__randomDict)

そうすれば、それらの要素にアトミックにのみ影響を与えることができます。

リスト/辞書フィールドで保存を行う場合、現在mongoengineはシンプルで単純です。例:

model.randomList.append(newitemL)

# Converts to a set of the whole list:
model.update(set__randomList=model.randomList)
于 2013-07-17T07:27:21.617 に答える