MongoDB에서 하나의 속성만 업데이트하기
MongoDB에서 문서의 특정 속성(필드) 하나만 업데이트하려면 $addToSet 연산자를 사용할 수 있습니다. $addToSet은 배열 필드에 값을 추가할 때, 동일한 값이 이미 존재하지 않는 경우에만 새로 추가해 주는 연산자로, 나머지 데이터는 그대로 유지하면서 원하는 속성만 안전하게 수정할 수 있습니다.
이번 글에서는 예제 컬렉션을 생성하고, $addToSet을 활용해 배열 속성에 새로운 값을 추가하는 과정을 단계별로 살펴보겠습니다.
1. 샘플 컬렉션 생성하기
먼저 insertOne() 메서드를 사용해 문서가 담긴 컬렉션을 생성합니다.
> db.demo336.insertOne({"Name":"Chris","Score":[45,67,78]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e522cb1f8647eb59e562097")
}
> db.demo336.insertOne({"Name":"David","Score":[89,93,47]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e522cb2f8647eb59e562098")
}2. 전체 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo336.find();
위 명령을 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e522cb1f8647eb59e562097"), "Name" : "Chris", "Score" : [ 45, 67, 78 ] }
{ "_id" : ObjectId("5e522cb2f8647eb59e562098"), "Name" : "David", "Score" : [ 89, 93, 47 ] }3. $addToSet으로 하나의 속성만 업데이트하기
다음은 Name이 "David"인 문서의 Score 배열에 새로운 값 [56, 34, 71]을 추가하는 쿼리입니다.
> db.demo336.update({Name:"David"},{ $addToSet: {Score: [56,34,71] }});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })실행 결과에서 nMatched가 1, nModified가 1로 표시되는데, 이는 조건에 일치하는 문서 한 개가 성공적으로 수정되었음을 의미합니다.
4. 업데이트 결과 확인하기
다시 find() 메서드로 전체 문서를 조회해 변경 사항을 확인해 보겠습니다.
> db.demo336.find();
{ "_id" : ObjectId("5e522cb1f8647eb59e562097"), "Name" : "Chris", "Score" : [ 45, 67, 78 ] }
{ "_id" : ObjectId("5e522cb2f8647eb59e562098"), "Name" : "David", "Score" : [ 89, 93, 47, [ 56, 34, 71 ] ] }출력 결과를 보면 David 문서의 Score 배열 끝에 [56, 34, 71]이라는 배열이 하나의 요소로 추가된 것을 확인할 수 있습니다. 이처럼 $addToSet 연산자를 사용하면 Name 등 다른 속성은 그대로 둔 채, 원하는 배열 속성만 선택적으로 업데이트할 수 있습니다.