当前位置:  开发笔记 > 编程语言 > 正文

如何使用mongoengine"插入如果不存在其他更新"?

如何解决《如何使用mongoengine"插入如果不存在其他更新"?》经验,为你挑选了2个好方法。

我正在使用Django中的mongoengine,
这是我的文档定义:

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

我想这样做:
给定一个user_idpoint:
如果没有文件,有这个user_id,创建一个具有user_idpoint并保存;
否则用user_idwith 更新文档point.
我可以用mongoengine在一个声明中这样做吗?



1> Nicolas Cort..:

请注意,get_or_create现在计划不推荐使用,因为MongoDB中没有事务支持,因此无法确保原子性.

首选方法是更新与更新插入:

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

有关MongoDB文档的 upsert的更多信息.


从版本0.9开始有一种新方法(解释[此处](http://stackoverflow.com/a/25863633/719276)):location = Location.objects(user_id = user_id).modify(upsert = True, new = True,set__point = point)

2> wong2..:

这就是我提出的:

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


`get_or_create()`现在[已弃用](https://groups.google.com/d/topic/mongoengine-users/U_1t2eYJqCA/discussion).Mongoengine工作人员推荐了[推荐](https://groups.google.com/d/topic/mongoengine-users/C-i7tKkjPg8/discussion).有关详细信息,请参阅@ NCao的答案.
`location,created = Location.objects.get_or_create(user_id = user_id)`是首选方式!但是,是的,这将做你需要的!
推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有