MongoDB에서 배열 필드에 새 항목을 추가하려면 $push 연산자를 사용합니다. 이 연산자는 지정된 배열의 끝에 값을 덧붙이는 방식으로 동작하며, 일대다(1:N) 관계로 구성된 내장 문서에 데이터를 추가할 때 특히 유용합니다.
1. 샘플 컬렉션 생성하기
먼저 insertOne() 메서드를 사용해 문서가 포함된 컬렉션을 생성합니다.
> db.demo253.insertOne(
... {
... _id: "101",
... isActive: false,
... details: [
... {
... Name: "Chris",
... },
... {
... CountryName: "US"
... }
... ]
... }
...);
{ "acknowledged" : true, "insertedId" : "101" }2. 문서 조회하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.
> db.demo253.find();
위 쿼리는 다음과 같은 결과를 출력합니다.
{ "_id" : "101", "isActive" : false, "details" : [ { "Name" : "Chris" }, { "CountryName" : "US" } ] }3. $push로 항목 추가하기
이제 update() 메서드와 $push 연산자를 조합하여 details 배열에 새 항목을 추가합니다. _id가 '101'인 문서를 찾아 해당 문서의 details 배열 끝에 Age 필드를 가진 객체를 추가하는 쿼리입니다.
> db.demo253.update({_id: '101'}, {$push: {details: {Age: 21}}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })결과에서 nMatched가 1, nModified가 1로 표시되면 조건에 맞는 문서 하나가 성공적으로 수정된 것입니다.
4. 업데이트 결과 확인하기
다시 find() 메서드로 전체 문서를 조회하여 변경 사항을 확인합니다.
> db.demo253.find();
실행 결과는 다음과 같습니다.
{ "_id" : "101", "isActive" : false, "details" : [ { "Name" : "Chris" }, { "CountryName" : "US" }, { "Age" : 21 } ] }정리
이처럼 MongoDB에서는 $push 연산자를 활용하면 기존 문서를 통째로 교체하지 않고도 배열 형태의 내장 문서에 손쉽게 새 항목을 추가할 수 있습니다. 참고로 최신 MongoDB 버전에서는 update() 대신 updateOne(), updateMany() 같은 명시적인 메서드 사용이 권장되며, 중복 추가를 방지하고 싶다면 $addToSet 연산자를 사용하는 것도 좋은 방법입니다.