tutorial query framework databases python django mongodb mongoengine

python - query - pymongo



¿Cómo hacer "insertar si no existe otra actualización" con mongoengine? (3)

Hay una nueva forma de hacerlo desde la versión 0.9 (explicada here ):

location = Location.objects(user_id=user_id).modify(upsert=True, new=True, set__point=point)

Devuelve el objeto creado o actualizado.

Estoy trabajando con mongoengine en Django,
Esta es mi definición de documento:

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

Quiero hacer esto:
dado un user_id y un point :
si no hay ningún documento que tenga este user_id , cree uno con el user_id y user_id y guárdelo;
de lo contrario actualizar el documento con user_id con point .
¿Puedo hacer esto en una declaración con mongoengine?


Tenga en cuenta que get_or_create ahora está programado para ser desaprobado, ya que si MongoDB no admite transacciones, no puede garantizar la atomicidad.

La forma preferida es update con upsert:

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

Más sobre actualizaciones en la documentación de MongoDB .


esto es lo que se me ocurrió:

location = Location.objects.get_or_create(user_id=user_id)[0] location.point = point location.save()