MongoDB는 (/), (연산자를 사용하는 /), (/) 메서드로 데이터를 변경합니다. 수정은 document 전체를 교체하는 대신 를 사용합니다. 중요한 구분입니다.
MongoDB는 (/), (연산자를 사용하는 /), (/) 메서드로 데이터를 변경합니다. 수정은 document 전체를 교체하는 대신 를 사용합니다. 중요한 구분입니다.
insertOneinsertManyupdateOneupdateManydeleteOnedeleteManydb.users.insertOne({ name: "Ann", age: 30 }); // → 삽입된 _id 반환
db.users.insertMany([{ name: "Bob" }, { name: "Carol" }]); // 대량 삽입 (효율적)
// updateOne — 필터(어떤 doc) + 업데이트(연산자 사용)
db.users.updateOne(
{ name: "Ann" },
{ $set: { age: 31, status: "active" } } // $set: 특정 field 변경
);
// 일반적인 업데이트 연산자
{ $set: { field: value } } // field 설정/변경
{ $unset: { field: "" } } // field 제거
{ $inc: { count: 1 } } // 숫자 증가
{ $push: { tags: "new" } } // 배열에 추가
{ $pull: { tags: "old" } } // 배열에서 제거
{ $addToSet: { tags: "x" } } // 없을 때만 배열에 추가
db.users.updateMany({ active: false }, { $set: { archived: true } }); // 일치하는 모두 업데이트
중요: 업데이트는 연산자($set, $inc, $push 등)를 사용하여 특정 field를 수정합니다. 연산자가 없으면 document 전체를 교체하게 됩니다. 흔한 함정입니다:
// ❌ 이것은 document 전체를 교체함 (다른 field를 잃음!)
db.users.updateOne({ name: "Ann" }, { age: 31 }); // 이제 Ann은 age만 가짐!
// ✅ field만 변경하려면 $set 사용
db.users.updateOne({ name: "Ann" }, { $set: { age: 31 } });
db.users.deleteOne({ name: "Ann" }); // 첫 번째 일치 항목 삭제
db.users.deleteMany({ active: false }); // 일치하는 모든 항목 삭제
db.users.deleteMany({}); // ⚠️ 모든 document 삭제!
db.users.updateOne(
{ email: "[email protected]" },
{ $set: { name: "Ann" } },
{ upsert: true } // 일치 항목이 없으면 새 document 삽입
);
삽입, 수정, 삭제 연산은 애플리케이션이 MongoDB에서 데이터를 변경하는 방식이며 모든 데이터 기반 애플리케이션에 근본적이므로, 이를 이해하는 것은 필수적인 일상 지식입니다.
메서드(생성을 위한 insertOne/insertMany, 수정을 위한 updateOne/updateMany, 제거를 위한 deleteOne/deleteMany)를 아는 것은 기본입니다.
가장 중요하고 흔히 실수하는 지점은 MongoDB 업데이트가 특정 field를 수정하기 위해 업데이트 연산자($set, $inc, $push, $pull 등)를 사용한다는 것이며, 결정적으로 연산자를 빠뜨리면 document 전체가 교체된다는 점입니다(updateOne({...}, {age: 31})이 다른 모든 field를 지우고 age만 남기는 악명 높은 함정). 따라서 field 단위 업데이트에는 항상 $set(및 다른 연산자)을 사용해야 함을 이해하는 것이 정확성에 필수적입니다.
일반적인 연산자(카운터를 위한 $set, $inc, 배열을 위한 $push/$pull/$addToSet — MongoDB의 배열이 풍부한 document를 고려하면 배열 연산자가 특히 관련됨)를 아는 것은 중요한 일상 지식입니다.
upsert({ upsert: true } — 일치 항목이 없으면 삽입, MongoDB의 삽입-또는-업데이트)를 이해하는 것은 흔한 삽입-또는-업데이트 패턴에 가치가 있습니다.
deleteMany({})의 위험(전체 삭제 — SQL의 WHERE 누락 위험과 유사)도 주목할 가치가 있습니다.
데이터 변경은 근본적이고, MongoDB의 연산자 기반 업데이트(document 교체 함정 포함), 배열 연산자, upsert가 데이터를 올바르게 변경하는 방식이므로, 삽입/수정/삭제 — 특히 중대한 업데이트 연산자 구분(실수로 인한 document 교체 회피) — 을 이해하는 것은 모든 MongoDB 개발에 필수적인 필수 지식이며, 특히 연산자 함정은 실제 버그의 빈번한 원인입니다.