won*_*ng2 21 python django mongodb mongoengine
我正在使用Django中的mongoengine,
这是我的文档定义:
class Location(mongoengine.Document):
user_id = mongoengine.IntField(required=True)
point = mongoengine.GeoPointField(required=True)
Run Code Online (Sandbox Code Playgroud)
我想这样做:
给定一个user_id和point:
如果没有文件,有这个user_id,创建一个具有user_id和point并保存;
否则用user_idwith 更新文档point.
我可以用mongoengine在一个声明中这样做吗?
Nic*_*tot 40
请注意,get_or_create现在计划不推荐使用,因为MongoDB中没有事务支持,因此无法确保原子性.
首选方法是更新与更新插入:
Location.objects(user_id=user_id).update_one(set__point=point, upsert=True)
Run Code Online (Sandbox Code Playgroud)
有关MongoDB文档的 upsert的更多信息.
自 0.9 版以来,有一种新方法可以做到这一点(在此处解释):
location = Location.objects(user_id=user_id).modify(upsert=True, new=True, set__point=point)
Run Code Online (Sandbox Code Playgroud)
它返回创建或更新的对象。
这就是我提出的:
location = Location.objects.get_or_create(user_id=user_id)[0]
location.point = point
location.save()
Run Code Online (Sandbox Code Playgroud)