programing

Mongo 문서를 삽입한 후 업데이트하려면 어떻게 해야 하나요?

mailnote 2023. 3. 12. 11:00
반응형

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_one대신update:

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() 조작이 실행됩니다.이 경우 Maniple이 True이면 "_id"가 to_save에 추가되고 이 메서드는 저장된 문서의 "_id"를 반환합니다.manifulate가 False일 경우 서버에 의해 "_id"가 추가되지만 이 메서드는 None을 반환합니다.

PyMongo에 대한 최신 문서인 "Insert a Document"(Insert는 권장되지 않음) 및 다음과 같은 방어적 접근법에 따라 다음과 같이 삽입 및 업데이트해야 합니다.

result = mycollection.insert_one(post)
post = mycollection.find_one({'_id': result.inserted_id})

if post is not None:
    post['newfield'] = "abc"
    mycollection.save(post)

오래된 질문입니다만, 답을 찾다가 우연히 발견했기 때문에, 참고로 답변을 업데이트하고 싶었습니다.

방법save그리고.update는 권장되지 않습니다.

save(to_save, 조작=)맞습니다. check_keys=맞습니다. **kwargs) 이 컬렉션에 문서를 저장합니다.

DEPRECATED - 대신 insert_one() 또는 replace_one()을 사용합니다.

버전 3.0에서 변경됨: safe 파라미터가 삭제되었습니다.승인되지 않은 쓰기 작업에 대해 w=0을 전달합니다.

update(spec, document, upsert=False, manifulate=False, multi=False, check_keys=맞습니다. **kwargs) 이 컬렉션의 문서를 업데이트합니다.

DEPRECATED - 대신 replace_one(), update_one() 또는 update_many()를 사용합니다.

버전 3.0에서 변경됨: safe 파라미터가 삭제되었습니다.승인되지 않은 쓰기 작업에 대해 w=0을 전달합니다.

OPs 고유의 경우 를 사용하는 것이 좋습니다.

언급URL : https://stackoverflow.com/questions/4372797/how-do-i-update-a-mongo-document-after-inserting-it

반응형