MongoDB에서 컬렉션(collection)에 저장된 기존 문서(document)를 업데이트하거나 수정하려면 update() 메서드를 사용해야 합니다. 기본 문법은 다음과 같습니다.
db.yourCollectionName.update(yourExistingValue, yourUpdatedValue);
첫 번째 인자에는 변경할 대상을 찾기 위한 조건을, 두 번째 인자에는 적용할 변경 내용을 지정합니다.
컬렉션 생성 및 문서 삽입
먼저 'updateInformation'이라는 이름의 컬렉션을 만들어 보겠습니다. MongoDB는 별도의 컬렉션 생성 명령 없이도 insert() 메서드로 문서를 삽입하면 컬렉션을 자동으로 생성해 줍니다.
> db.updateInformation.insert({"StudentName":"Larry",StudentAge:35,StudentMarks:89});실행 결과는 다음과 같습니다.
WriteResult({ "nInserted" : 1 })삽입된 문서 확인하기
find() 메서드를 사용하면 updateInformation 컬렉션에 저장된 문서를 조회할 수 있습니다.
> db.updateInformation.find();
앞서 삽입한 문서가 정상적으로 저장된 것을 출력 결과에서 확인할 수 있습니다.
{ "_id" : ObjectId("5c6aa29a64f3d70fcc9147f7"), "StudentName" : "Larry", "StudentAge" : 35, "StudentMarks" : 89 }update() 메서드로 문서 수정하기
이제 $set 연산자와 함께 update() 메서드를 사용하여 StudentAge 필드의 값을 35에서 24로 변경해 보겠습니다.
> db.updateInformation.update({StudentAge:35},{$set:{StudentAge:24}});실행 결과는 다음과 같습니다.
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })여기서 nMatched는 조건에 일치한 문서 수, nModified는 실제로 수정된 문서 수를 의미합니다. nUpserted가 0이라는 것은 새 문서가 추가되지 않고 기존 문서만 수정되었다는 뜻입니다.
수정 결과 확인하기
pretty() 메서드를 함께 사용하면 문서를 들여쓰기가 적용된 가독성 좋은 형태로 출력할 수 있습니다.
> db.updateInformation.find().pretty();
출력 결과는 다음과 같습니다.
{
"_id" : ObjectId("5c6aa29a64f3d70fcc9147f7"),
"StudentName" : "Larry",
"StudentAge" : 24,
"StudentMarks" : 89
}위 출력에서 확인할 수 있듯이 StudentAge 필드가 이전 값인 35에서 24로 성공적으로 업데이트되었습니다.
참고: 최신 버전에서 권장되는 방식
update() 메서드는 구버전 방식으로, MongoDB 4.2 이후부터는 하나의 문서만 수정할 때는 updateOne(), 여러 문서를 한 번에 수정할 때는 updateMany() 사용이 권장됩니다. 사용법은 동일하게 첫 번째 인자에 조건, 두 번째 인자에 $set 등의 갱신 연산자를 지정하면 됩니다.