Я использовал метод get_or_create с MongoEngine в приложении Django. Сегодня я заметил, что было несколько повторяющихся записей. Я наткнулся на это в Справочнике API MongoEngine для get_or_create:MongoEngine get_or_create Альтернативы
Для этого требуются две отдельные операции, и поэтому существует условие гонки. Поскольку в 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"
Будет ли это решить мою проблему? Есть ли лучший способ?
Ваше предложение не решит проблему. Предположим, что у вас есть два экземпляра («потоки») вашей программы. Оба запускаются полностью синхронно. Таким образом, оба потока выполняют проверку существования в одно и то же время, и пока не существует объекта. Затем они продолжаются, и оба сохраняют → дубликат. – sk1p