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

MongoDB 내장 문서 배열에 $push로 새 요소 추가하는 방법

MongoDB에서 내장(embedded) 문서 배열에 새 요소를 추가하려면 $push 연산자를 사용할 수 있습니다. 이 글에서는 실제 예제를 통해 내장 배열에 데이터를 삽입하는 과정을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 문서가 포함된 컬렉션을 생성해 보겠습니다. 아래 예제에서는 'details'라는 내장 배열 필드를 가진 문서를 하나 삽입합니다.

> db.demo288.insertOne({"Name":"Chris",details:[{"CountryName":"US",Marks:78},{"CountryName":"UK",Marks:68}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e4c0393f49383b52759cbbe")
}

2. 현재 문서 확인하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.

> db.demo288.find();

위 명령은 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5e4c0393f49383b52759cbbe"), "Name" : "Chris", "details" : [ { "CountryName" : "US", "Marks" : 78 }, { "CountryName" : "UK", "Marks" : 68 } ] }

3. $push로 내장 배열에 요소 추가하기

다음은 내장 문서 배열에 $push를 적용하는 쿼리입니다. 조건으로 Name이 "Chris"인 문서를 찾고, details 배열 끝에 새로운 객체를 추가합니다.

> db.demo288.update( {Name: "Chris"}, {$push:{ "details":{"CountryName" : "AUS", "Marks" : 98} }}, {upsert:true});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

여기서 {upsert:true} 옵션은 조건에 일치하는 문서가 없을 경우 새 문서를 자동으로 생성하도록 지정하는 역할을 합니다. 위 실행 결과에서 nMatched가 1이므로 기존 문서가 정상적으로 수정되었음을 알 수 있습니다.

4. 업데이트 결과 확인하기

다시 find() 메서드로 전체 문서를 조회해 보겠습니다.

> db.demo288.find();

실행 결과는 다음과 같습니다.

{
   "_id" : ObjectId("5e4c0393f49383b52759cbbe"), "Name" : "Chris", "details" : [
      { "CountryName" : "US", "Marks" : 78 }, { "CountryName" : "UK", "Marks" : 68 },
      { "CountryName" : "AUS", "Marks" : 98 }
   ] 
}

정리

이처럼 $push 연산자를 활용하면 기존 문서를 덮어쓰지 않고도 내장 배열의 맨 뒤에 새 요소를 간단히 추가할 수 있습니다. 참고로 최신 MongoDB 버전에서는 update() 대신 updateOne() 또는 updateMany() 메서드를 사용하는 것이 권장됩니다.