Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 문서 전체를 교체하며 업데이트하는 방법

MongoDB에서 전체 문서를 교체하면서 업데이트하기

MongoDB에서는 update() 메서드를 사용할 때 두 번째 인자로 새로운 문서를 전달하면 기존 문서의 일부 필드만 수정하는 것이 아니라 문서 전체를 통째로 교체할 수 있습니다. 이번 글에서는 실제 예제를 통해 전체 문서를 교체하면서 업데이트하는 과정을 단계별로 살펴보겠습니다.

1단계: 샘플 컬렉션 및 문서 생성

먼저 insertOne() 메서드를 사용하여 학생 정보가 담긴 문서 하나를 포함하는 컬렉션을 생성합니다.

> db.replacingEntireDocumentDemo.insertOne({"StudentFirstName":"John","StudentLastName":"Smith","StudentCountryName":"US"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cd3119bb64f4b851c3a13e8")
}

2단계: find() 메서드로 문서 조회

find() 메서드와 pretty()를 함께 사용하면 컬렉션에 저장된 문서를 보기 좋게 출력할 수 있습니다.

> db.replacingEntireDocumentDemo.find().pretty();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{
   "_id" : ObjectId("5cd3119bb64f4b851c3a13e8"),
   "StudentFirstName" : "John",
   "StudentLastName" : "Smith",
   "StudentCountryName" : "US"
}

3단계: update()로 문서 전체 교체

이제 update() 메서드의 첫 번째 인자에는 기존 문서를 찾기 위한 조건을, 두 번째 인자에는 교체할 새로운 문서를 전달합니다. 이렇게 하면 지정한 조건에 일치하는 문서가 새 문서로 완전히 대체됩니다.

> db.replacingEntireDocumentDemo.update({"StudentFirstName":"John","StudentLastName":"Smith","StudentCountryName":"US"}, {"StudentFirstName":"David","StudentLastName":"Miller","StudentCountryName":"AUS"});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

실행 결과에서 nMatched : 1은 조건에 일치한 문서가 1개 있다는 뜻이고, nModified : 1은 해당 문서가 성공적으로 수정되었음을 의미합니다.

4단계: 변경 결과 확인

컬렉션의 모든 레코드를 다시 한번 조회하여 문서가 제대로 교체되었는지 확인해 보겠습니다.

> db.replacingEntireDocumentDemo.find().pretty();

출력 결과를 보면 이름, 성, 국가 코드까지 모두 새로운 값으로 바뀐 것을 확인할 수 있습니다. 단, _id 값은 문서를 교체하더라도 그대로 유지됩니다.

{
   "_id" : ObjectId("5cd3119bb64f4b851c3a13e8"),
   "StudentFirstName" : "David",
   "StudentLastName" : "Miller",
   "StudentCountryName" : "AUS"
}

참고 사항

MongoDB 최신 버전에서는 update() 대신 replaceOne() 또는 updateOne(), updateMany() 사용이 권장됩니다. 특히 replaceOne()은 위 예제처럼 문서 전체를 교체하는 용도에 적합하며, $set 같은 갱신 연산자 없이 새 문서를 직접 전달하면 됩니다. 반면 일부 필드만 수정하고 싶다면 $set 연산자를 사용하는 것이 좋습니다.