Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 $push 연산자로 일대다 내장 문서에 항목 추가하기

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 연산자를 사용하는 것도 좋은 방법입니다.