MongoDB에서 $set 연산자로 레코드 업데이트하기
MongoDB에서 문서를 업데이트할 때 $set 연산자를 사용하면 기존 필드를 그대로 유지하면서 새로운 필드만 추가하거나 특정 필드의 값만 변경할 수 있습니다. 만약 $set 없이 update() 메서드를 사용하면 지정하지 않은 기존 필드가 모두 삭제되므로 주의해야 합니다.
먼저 예제에 사용할 컬렉션을 생성하고 문서를 삽입해 보겠습니다.
> db.updateRecordDemo.insertOne({"StudentName":"Larry"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbd6f95de8cc557214c0e0a")
}
> db.updateRecordDemo.insertOne({"StudentName":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbd6f9cde8cc557214c0e0b")
}
> db.updateRecordDemo.insertOne({"StudentName":"Mike"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbd6f9dde8cc557214c0e0c")
}find() 메서드로 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.updateRecordDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5cbd6f95de8cc557214c0e0a"), "StudentName" : "Larry" }
{ "_id" : ObjectId("5cbd6f9cde8cc557214c0e0b"), "StudentName" : "David" }
{ "_id" : ObjectId("5cbd6f9dde8cc557214c0e0c"), "StudentName" : "Mike" }$set을 사용한 업데이트 쿼리 실행
이제 기존 필드(StudentName)를 대체하지 않고 새로운 필드(StudentAge)를 추가하는 업데이트 쿼리를 실행해 보겠습니다.
> db.updateRecordDemo.update({"_id" :ObjectId("5cbd6f9cde8cc557214c0e0b") },{$set : {"StudentAge":24}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })WriteResult 결과를 보면 nMatched가 1(조건에 일치하는 문서 1개), nModified가 1(실제 수정된 문서 1개)로 정상적으로 업데이트가 완료된 것을 확인할 수 있습니다.
업데이트 후 결과 확인
다시 한번 전체 문서를 조회하여 변경 사항을 확인해 보겠습니다.
> db.updateRecordDemo.find().pretty();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5cbd6f95de8cc557214c0e0a"), "StudentName" : "Larry" }
{
"_id" : ObjectId("5cbd6f9cde8cc557214c0e0b"),
"StudentName" : "David",
"StudentAge" : 24
}
{ "_id" : ObjectId("5cbd6f9dde8cc557214c0e0c"), "StudentName" : "Mike" }결과를 보면 David 문서에 기존의 StudentName 필드는 그대로 유지된 상태에서 새로운 StudentAge 필드가 추가된 것을 확인할 수 있습니다. 이처럼 MongoDB에서 부분 업데이트를 수행하려면 반드시 $set 연산자를 함께 사용하는 것이 핵심입니다.