MongoDB에서 배열 안에 있는 특정 요소를 업데이트하려면 $set 연산자와 위치 연산자($)를 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 자세히 살펴보겠습니다.
1. 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용하여 문서가 포함된 컬렉션을 생성합니다. CollegeDetails라는 배열 필드에는 대학 이름(CollegeName)과 등록금(Fees) 정보를 담은 두 개의 객체가 들어 있습니다.
> db.demo494.insertOne(
... {
... "CollegeDetails" : [
... {
... "CollegeName" : "MIT",
... "Fees" : 80000
... },
... {
... "CollegeName" : "SU",
... "Fees" : 90000
... }
... ]
... }
... )
{
"acknowledged" : true,
"insertedId" : ObjectId("5e84a5c1b0f3fa88e22790c9")
}
2. 컬렉션의 모든 문서 조회
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.
> db.demo494.find().pretty();
위 쿼리는 다음과 같은 결과를 출력합니다.
{
"_id" : ObjectId("5e84a5c1b0f3fa88e22790c9"),
"CollegeDetails" : [
{
"CollegeName" : "MIT",
"Fees" : 80000
},
{
"CollegeName" : "SU",
"Fees" : 90000
}
]
}3. 배열 내부 요소 업데이트하기
다음은 MongoDB에서 배열 내부의 요소를 업데이트하는 쿼리입니다. 조건으로 CollegeName이 "MIT"인 요소를 찾고, 위치 연산자($)를 사용해 해당 요소의 Fees 값을 100000으로 변경합니다.
> db.demo494.update(
...
... {
... "CollegeDetails.CollegeName": "MIT"
... },
...
... {
... $set:
... {
... "CollegeDetails.$.Fees" : 100000
... }
... }
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
실행 결과 nMatched가 1, nModified가 1로 반환되었으므로, 조건에 일치하는 문서 하나가 성공적으로 수정되었다는 의미입니다.
4. 업데이트 결과 확인
다시 find() 메서드로 모든 문서를 조회하여 변경 사항을 확인합니다.
> db.demo494.find().pretty();
출력 결과를 보면 MIT 대학의 Fees 값이 80000에서 100000으로 성공적으로 변경된 것을 확인할 수 있습니다.
{
"_id" : ObjectId("5e84a5c1b0f3fa88e22790c9"),
"CollegeDetails" : [
{
"CollegeName" : "MIT",
"Fees" : 100000
},
{
"CollegeName" : "SU",
"Fees" : 90000
}
]
}핵심 정리
배열 내부의 특정 요소를 업데이트할 때는 $set 연산자와 위치 연산자($)를 함께 사용합니다. 위치 연산자는 쿼리 조건에 일치하는 첫 번째 배열 요소를 가리키며, 이를 활용하면 배열 전체를 교체하지 않고도 원하는 요소의 특정 필드만 효율적으로 수정할 수 있습니다.