【发布时间】:2022-01-20 06:22:55
【问题描述】:
我一直在 Django 应用程序中使用带有 MongoEngine 的 get_or_create 方法。今天,我注意到有一些重复的条目。我在 get_or_create 的 MongoEngine API 参考中遇到了这个:
这需要两个单独的操作,因此存在竞争条件。由于 mongoDB 中没有事务,因此应调查其他方法,以确保您在使用此方法时不会意外重复数据。现在计划在 1.0 之前将其删除
我应该使用这样的东西吗?:
from models import Post
post = Post(name='hello')
try:
Posts.objects.get(name=post.name)
print "exists"
except:
post.save()
print "saved"
这能解决我的问题吗? 有没有更好的办法?
【问题讨论】:
-
您的建议无法解决问题。假设您有两个正在运行的程序实例(“线程”)。两者完全同步运行。因此,两个线程同时进行存在性检查,并且还没有对象存在。然后他们继续保存→复制
标签: django mongodb mongoengine