Mongo 문서를 삽입 한 후 업데이트하려면 어떻게합니까?
문서를 삽입한다고 가정 해 보겠습니다.
post = { some dictionary }
mongo_id = mycollection.insert(post)
이제 필드를 추가하고 업데이트하고 싶다고 가정 해 보겠습니다. 어떻게하나요? 작동하지 않는 것 같습니다 .....
post = mycollection.find_one({"_id":mongo_id})
post['newfield'] = "abc"
mycollection.save(post)
pymongo에서 업데이트 할 수 있습니다 :
mycollection.update({'_id':mongo_id}, {"$set": post}, upsert=False)
데이터베이스에서 게시물을 찾을 수없는 경우 업데이트하는 대신 Upsert 매개 변수가 삽입됩니다.
문서는 mongodb 사이트 에서 사용할 수 있습니다 .
업데이트 버전> 3의 경우 update 대신 update_one 을 사용하십시오 .
mycollection.update_one({'_id':mongo_id}, {"$set": post}, upsert=False)
mycollection.find_one_and_update({"_id": mongo_id},
{"$set": {"newfield": "abc"}})
당신을 위해 훌륭하게 작동해야합니다. id의 문서가 mongo_id
없으면을 함께 사용하지 않으면 실패합니다 upsert=True
. 기본적으로 이전 문서를 반환합니다. 새 계정을 얻으려면 return_document=ReturnDocument.AFTER
. 모든 매개 변수는 API에 설명되어 있습니다.
이 방법은 MongoDB 3.0에 도입되었습니다. 3.2, 3.4 및 3.6으로 확장되었습니다.
collection.save(the_changed_dict)
이 방법으로 사용 하겠습니다. 나는 이것을 방금 테스트했으며 여전히 나를 위해 작동합니다. 다음은에서 직접 인용 한 것입니다 pymongo doc.
.
save(to_save[, manipulate=True[, safe=False[, **kwargs]]])
이 컬렉션에 문서를 저장합니다.
to_save에 이미 "_id"가 있으면 update () (upsert) 작업이 수행되고 해당 "_id"가있는 기존 문서를 덮어 씁니다. 그렇지 않으면 insert () 작업이 수행됩니다. 이 경우 조작이 True이면 "_id"가 to_save에 추가되고이 메서드는 저장된 문서의 "_id"를 반환합니다. 조작이 False이면 서버에 의해 "_id"가 추가되지만이 메서드는 None을 반환합니다.
이것은 오래된 질문이지만 답변을 찾을 때 이것을 우연히 발견했기 때문에 참조를 위해 답변에 대한 업데이트를 제공하고 싶었습니다.
save
및 메서드 update
는 더 이상 사용되지 않습니다.
save (to_save, navigate = True, check_keys = True, ** kwargs) ¶ 문서를이 컬렉션에 저장합니다.
DEPRECATED-대신 insert_one () 또는 replace_one ()을 사용하십시오.
버전 3.0에서 변경 : safe 매개 변수가 제거되었습니다. 확인되지 않은 쓰기 작업에 대해 w = 0을 전달합니다.
update (spec, document, upsert = False, 조작 = False, multi = False, check_keys = True, ** kwargs)이 컬렉션의 문서를 업데이트합니다.
DEPRECATED-대신 replace_one (), update_one () 또는 update_many ()를 사용하십시오.
버전 3.0에서 변경 : safe 매개 변수가 제거되었습니다. 확인되지 않은 쓰기 작업에 대해 w = 0을 전달합니다.
OP의 특정 경우에는 replace_one
.
문서 삽입 (삽입은 더 이상 사용되지 않음) 이라는 제목의 PyMongo에 대한 최신 문서 와 다음과 같은 방어 적 접근 방식에 따르면 다음과 같이 삽입하고 업데이트해야합니다.
result = mycollection.insert_one(post)
post = mycollection.find_one({'_id': result.inserted_id})
if post is not None:
post['newfield'] = "abc"
mycollection.save(post)
참고 URL : https://stackoverflow.com/questions/4372797/how-do-i-update-a-mongo-document-after-inserting-it
'programing' 카테고리의 다른 글
ASP.NET 응용 프로그램이 로컬에서 실행 중인지 확인 (0) | 2020.10.16 |
---|---|
mysql2 및 rails3 (번 들러)의 RuntimeError (0) | 2020.10.16 |
바탕 화면 알림을 생성 한 Chrome 탭에 초점을 맞추는 방법은 무엇입니까? (0) | 2020.10.16 |
moment.js를 사용하여 날짜를 "MM / dd / yyyy"문자열로 변환 (0) | 2020.10.16 |
서버 측에서 Android 앱 구매를 확인하는 방법 (앱 결제 v3의 Google Play) (0) | 2020.10.16 |