MongoDB 업데이트 연산자($ 접두사)는 document의 특정 field를 제자리에서 수정합니다 — 값 설정, 숫자 증가, 배열 조작 등. document 전체를 교체하지 않고 document를 올바르게 갱신하는 데 필수적이며 원자적이고 표적화된 수정을 가능하게 합니다.
field 업데이트 연산자
db.users.updateOne({ _id: id }, {
$set: { name: "Ann", "address.city": "LA" }, // field 설정 (점으로 중첩 포함)
$unset: { tempField: "" }, // field 제거
$rename: { oldName: "newName" }, // field 이름 변경
$inc: { loginCount: 1, score: -5 }, // 숫자 증가/감소
$mul: { price: 1.1 }, // 곱하기
$min: { lowest: 10 }, $max: { highest: 100 }, // 더 낮으면/높으면 설정
$currentDate: { lastModified: true } // 현재 날짜로 설정
});
$set(중첩 field를 점 표기법으로 포함하여 field 변경), $inc(증가 — 카운터에 유용), $unset, $rename 등은 document의 나머지에 영향을 주지 않고 field를 수정합니다.
배열 업데이트 연산자 (MongoDB에서 매우 중요)
db.posts.updateOne({ _id: id }, {
$push: { tags: "new" }, // 배열에 추가
$push: { scores: { $each: [90, 85], $sort: -1, $slice: 5 } }, // 여러 개 추가, 정렬, 제한
$addToSet: { tags: "unique" }, // 이미 없을 때만 추가
$pull: { tags: "old" }, // 일치하는 요소 제거
$pop: { queue: -1 }, // 첫(-1) 또는 마지막(1) 제거
$pullAll: { nums: [1, 2] } // 나열된 모든 값 제거
});
배열 연산자는 MongoDB의 배열이 풍부한 document를 고려하면 중요합니다: $push(추가), $addToSet(고유하면 추가), $pull(일치 제거), $pop(끝 제거), 그리고 대량/제한된 배열을 위한 $each/$slice 같은 수정자.
배열 요소 갱신 (positional 연산자)
// $ — 첫 번째로 일치하는 배열 요소를 갱신
db.posts.updateOne(
{ _id: id, "comments.user": "Bob" },
{ $set: { "comments.$.text": "Edited" } } // Bob의 comment 갱신
);
// $[] — 모든 요소 갱신; $[identifier] — 조건에 맞는 요소 갱신
db.users.updateOne({ _id: id }, { $inc: { "scores.$[]": 5 } }); // 모든 score에 +5
positional 연산자($, $[], $[<id>])는 특정 또는 모든 배열 요소를 갱신합니다 — 배열 내부 데이터 수정에 강력합니다.
왜 중요한가
업데이트 연산자는 MongoDB에서 document를 올바르게 수정하는 데 필수적이므로, 이를 이해하는 것은 모든 데이터 갱신 코드에 근본적인 일상 지식입니다.
근본적인 지점(기본 업데이트에서 다룸)은 연산자가 document 전체를 교체하는 대신 특정 field를 수정한다는 것이지만, 연산자의 범위를 이해하는 것이 애플리케이션이 필요로 하는 수정을 표현하는 데 중요합니다. field 연산자($set, 카운터를 위한 $inc, $unset, $min/$max 등)는 field 단위 변경을 처리합니다.
결정적으로, 배열 업데이트 연산자는 MongoDB에서 특히 중요한데, document가 흔히 배열을 포함하고(document 모델의 핵심 부분), $push(추가), $addToSet(고유하면 추가), $pull(일치 제거), $pop, 수정자(제한된 배열을 위한 $each, $slice)가 배열 데이터를 올바르게 조작하는 방식이기 때문입니다 — MongoDB의 document 구조 작업의 중심인 빈번한 요구입니다. positional 연산자($, $[], $[<id>])로 특정 또는 모든 배열 요소를 갱신하는 것은 배열 안에 중첩된 데이터 수정에 강력합니다 — 배열의 특정 comment 편집 같은 경우를 처리합니다.
이 연산자들을 이해하면 MongoDB가 뛰어난 원자적이고 표적화된 수정(한 번의 원자적 연산으로 document의 일부를 수정)이 가능합니다.
document를 갱신하는 것 — 특히 배열을 — 은 끊임없이 필요하고, MongoDB의 풍부한 업데이트 연산자(field, 배열, positional)가 이 수정을 올바르고 원자적으로 표현하는 방식이므로, 업데이트 연산자를 이해하는 것은 필수적이고 자주 적용되는 MongoDB 지식이며, 특히 배열 연산자는 MongoDB의 배열이 풍부한 document 작업의 중심이고 올바른 연산자를 아는 것이 복잡한 수정을 깔끔하고 원자적으로 만드는 흔한 영역입니다.
