MongoDB에서 특정 문서를 수정하려면 update() 메서드를 사용하고, 변경할 새로운 값은 $set 연산자로 지정합니다. 이 글에서는 ObjectId(_id)를 기준으로 컬렉션의 행(문서)을 업데이트하는 과정을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성하기
먼저 insertOne() 메서드를 사용해 demo34 컬렉션에 문서 세 개를 생성합니다.
> db.demo34.insertOne({"StudentFirstName":"Chris","StudentAge":24});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e1758b4cfb11e5c34d898cd")
}
> db.demo34.insertOne({"StudentFirstName":"David","StudentAge":23});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e1758bdcfb11e5c34d898ce")
}
> db.demo34.insertOne({"StudentFirstName":"Bob","StudentAge":20});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e1758c6cfb11e5c34d898cf")
}2. 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 있는 모든 문서를 조회할 수 있습니다.
> db.demo34.find();
위 쿼리는 다음과 같은 결과를 출력합니다.
{ "_id" : ObjectId("5e1758b4cfb11e5c34d898cd"), "StudentFirstName" : "Chris", "StudentAge" : 24 }
{ "_id" : ObjectId("5e1758bdcfb11e5c34d898ce"), "StudentFirstName" : "David", "StudentAge" : 23 }
{ "_id" : ObjectId("5e1758c6cfb11e5c34d898cf"), "StudentFirstName" : "Bob", "StudentAge" : 20 }3. ObjectId로 문서 업데이트하기
다음은 특정 ObjectId를 조건으로 지정하여 해당 문서의 이름과 나이를 한 번에 수정하는 쿼리입니다.
> db.demo34.update({_id:ObjectId("5e1758bdcfb11e5c34d898ce")},
... {$set:{"StudentFirstName" : "Mike","StudentAge" : 19}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })실행 결과인 WriteResult를 보면 nMatched가 1이므로 조건에 일치하는 문서가 하나 있었고, nModified가 1이므로 실제로 한 개의 문서가 성공적으로 수정되었음을 알 수 있습니다.
4. 업데이트 결과 확인하기
다시 find() 메서드로 전체 문서를 조회해 변경 사항을 확인해 보겠습니다.
> db.demo34.find();
출력 결과를 보면 두 번째 문서의 이름이 David에서 Mike로, 나이가 23에서 19로 변경된 것을 확인할 수 있습니다.
{ "_id" : ObjectId("5e1758b4cfb11e5c34d898cd"), "StudentFirstName" : "Chris", "StudentAge" : 24 }
{ "_id" : ObjectId("5e1758bdcfb11e5c34d898ce"), "StudentFirstName" : "Mike", "StudentAge" : 19 }
{ "_id" : ObjectId("5e1758c6cfb11e5c34d898cf"), "StudentFirstName" : "Bob", "StudentAge" : 20 }이처럼 _id 필드의 ObjectId 값을 조건으로 사용하면 컬렉션 내에서 정확히 하나의 문서를 안전하게 식별하여 업데이트할 수 있습니다. $set 연산자를 사용하면 지정한 필드만 선택적으로 수정되며, 나머지 필드는 그대로 유지됩니다.