2

我正在使用 mongoengine 并且似乎遇到了一些潜在的竞争条件事件。作为一个简单的例子,我们有这样的代码

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

因此,如果两个用户尝试使用不同的项目执行此操作,那么有时它只会显示 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 回答