Как сделать "insert if not exist else update" с помощью mongoengine?
Я работаю с mongoengine в Django,
это мой документ defination:
class Location(mongoengine.Document):
user_id = mongoengine.IntField(required=True)
point = mongoengine.GeoPointField(required=True)
Я хочу сделать это:
учитывая user_id
и point
:
если нет документа, который имеет это user_id
создайте одну с user_id
и point
и сохранить его;
иначе обновите документ с помощью user_id
С point
.
Могу ли я сделать это в одном заявлении с mongoengine?
3 ответов
отметим, что get_or_create
теперь планируется устаревшим, потому что без поддержки транзакций в MongoDB он не может обеспечить атомарность.
предпочтительным способом является обновление С upsert:
Location.objects(user_id=user_id).update_one(set__point=point, upsert=True)
больше на upserts на документация MongoDB.
вот что я придумал:
location = Location.objects.get_or_create(user_id=user_id)[0]
location.point = point
location.save()
существует новый способ сделать это с версии 0.9 (объяснено здесь):
location = Location.objects(user_id=user_id).modify(upsert=True, new=True, set__point=point)
возвращает созданный или обновленный объект.