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()