MongoEngine get_or_create替代品

时间:2014-01-15 00:46:42

标签: django mongodb mongoengine

我一直在Django应用程序中使用get_or_create方法和MongoEngine。今天,我注意到有一些重复的条目。我在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"

这会解决我的问题吗? 还有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

要执行upsert,请使用以下语法:

Posts.objects(name="hello").update(set__X=Y, upsert=True)

这将添加一个名为“hello”的帖子,如果它还不存在则X = Y,否则它将更新现有帖子,只需设置X = Y.