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

MongoDB에서 기존 문서를 덮어쓰지 않고 업데이트하는 방법

MongoDB 문서를 안전하게 업데이트하는 방법

MongoDB에서 특정 필드의 값만 수정하고 싶을 때는 update() 메서드와 함께 $set 연산자를 사용하면 됩니다. 이 방법을 사용하면 기존 문서 전체가 덮어써지지 않고, 지정한 필드만 변경됩니다.

실제 예제를 통해 확인해 보겠습니다. 먼저 컬렉션을 생성하고 문서를 삽입합니다.

> db.demo401.insertOne(
...    {
...       "_id" : 1001,
...       "Name" : "Chris",
...       "SubjectName" : "MongoDB",
...       "Score" : 45
...    }
... );
{ "acknowledged" : true, "insertedId" : 1001 }

삽입된 문서 확인하기

find() 메서드를 사용하여 컬렉션의 모든 문서를 조회할 수 있습니다.

> db.demo401.find();

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

{ "_id" : 1001, "Name" : "Chris", "SubjectName" : "MongoDB", "Score" : 45 }

$set 연산자로 필드 값만 업데이트하기

이제 기존 문서를 덮어쓰지 않고 Score 필드만 89로 변경해 보겠습니다. $set 연산자를 사용한 업데이트 쿼리는 다음과 같습니다.

> db.demo401.update({_id: 1001}, {$set: {Score:89}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

결과에서 nModified : 1은 하나의 문서가 성공적으로 수정되었음을 의미합니다.

업데이트 결과 확인

다시 find() 메서드로 모든 문서를 조회해 봅니다.

> db.demo401.find();

실행 결과는 다음과 같습니다.

{ "_id" : 1001, "Name" : "Chris", "SubjectName" : "MongoDB", "Score" : 89 }

출력 결과를 보면 Name, SubjectName 등 다른 필드는 그대로 유지된 상태에서 Score 필드만 45에서 89로 변경된 것을 확인할 수 있습니다.

참고 사항

만약 $set 없이 update()를 호출하면 두 번째 인수로 전달된 문서가 기존 문서 전체를 대체해 버리므로 주의해야 합니다. 따라서 부분 업데이트를 원한다면 항상 $set 연산자를 사용하는 것이 좋습니다. 또한 최신 MongoDB 버전에서는 updateOne()이나 updateMany() 같은 메서드를 사용하는 것이 권장됩니다.