Search code examples
pythondjangomongodbmongoengine

How to do "insert if not exist else update" with mongoengine?


I'm working with mongoengine in Django,
this is my document defination:

class Location(mongoengine.Document):  
    user_id = mongoengine.IntField(required=True)  
    point = mongoengine.GeoPointField(required=True)

I want to do this:
given a user_id and a point:
if there is no document that have this user_id, create one with the user_id and point and save it;
else update the document with user_id with point.
Can I do this in one statement with mongoengine?


Solution

  • Note that get_or_create is now scheduled to be deprecated, because with no transaction support in MongoDB it cannot ensure atomicity.

    The preferred way is update with upsert:

    Location.objects(user_id=user_id).update_one(set__point=point, upsert=True)
    

    More on upserts on the MongoDB documentation.