반응형
mongo 엔진으로 "존재하지 않으면 삽입 업데이트"를 수행하는 방법은 무엇입니까?
일하고 .
제 정의입니다: 이이내정의다니입문서것.
class Location(mongoengine.Document):
user_id = mongoengine.IntField(required=True)
point = mongoengine.GeoPointField(required=True)
이 작업을 수행합니다.
가 주어지면user_id
a 리고a.point
:
에 이 문서가 .user_id
를 사용하여 하나를 만듭니다.user_id
그리고.point
그것을저장합니다.
않으면 그지않으문업합다니로 합니다.user_id
와 함께point
.
mongoengine?한으로 할 수 ?
:get_or_create
MongoDB에서 트랜잭션 지원이 없으면 원자성을 보장할 수 없기 때문에 이제 더 이상 사용되지 않도록 예약되었습니다.
기본 방법은 upsert를 사용하여 업데이트하는 것입니다.
Location.objects(user_id=user_id).update_one(set__point=point, upsert=True)
MongoDB 설명서의 upsert에 대한 자세한 내용.
버전 0.9(여기서 설명) 이후로 이를 수행하는 새로운 방법은 다음과 같습니다.
location = Location.objects(user_id=user_id).modify(upsert=True, new=True, set__point=point)
생성되거나 업데이트된 개체를 반환합니다.
이것이 제가 생각해낸 것입니다.
location = Location.objects.get_or_create(user_id=user_id)[0]
location.point = point
location.save()
또는 다음을 통해 클래스 개체에 메서드를 추가할 수 있습니다.
class Location(mongoengine.Document):
user_id = mongoengine.IntField(required=True)
point = mongoengine.GeoPointField(required=True)
def register(self):
# if doesnt exist, create user id and point field
if not Location.objects(user_id=self.user_id):
self.user_id = self.user_id
self.point = self.point
self.save()
return True
# does exist, do nothing
else:
return False
존재하지 않는 업데이트에 대한 저의 해결책은 다음과 같습니다.
def upsert(self, data: dict, query: dict):
try:
sets = {}
for key in data.keys():
sets[f"set__{key}"] = data[key]
response = self.model.objects(**query).update_one(upsert=True, **sets)
return response
except Exception as ex:
# Logger(str(ex)).log_error()
return False
▁method있다수니▁the 방법을 사용할 수 있습니다.update
.
언급URL : https://stackoverflow.com/questions/8447502/how-to-do-insert-if-not-exist-else-update-with-mongoengine
반응형
'programing' 카테고리의 다른 글
양식 인증: 로그인 페이지로 리디렉션 사용 안 함 (0) | 2023.06.28 |
---|---|
복제를 위해 GitHub.com 에 연결할 수 없음 (0) | 2023.06.28 |
모든 Git 명령의 시작 부분에 "git"를 입력하지 않으려면 어떻게 해야 합니까? (0) | 2023.06.23 |
WPF 프로그램의 속도를 높이는 방법은 무엇입니까? (0) | 2023.06.23 |
뭐가 더 좋습니까?하위 쿼리 또는 내부 접합 10개 테이블? (0) | 2023.06.23 |