MongoDB에서 $push로 배열에 값 추가하기
MongoDB에서 기존 문서의 배열 필드에 새로운 값을 수동으로 추가하려면 $push 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 컬렉션 생성부터 값 추가까지 전 과정을 단계별로 살펴보겠습니다.
1단계: 샘플 컬렉션 생성
먼저 insert() 메서드를 사용하여 문서가 포함된 컬렉션을 생성합니다.
> db.demo585.insert({
... firstName: 'John',
... lastName: 'Doe',
... SubjectName:"MongoDB",
... Marks: [59]
... });
WriteResult({ "nInserted" : 1 })
> db.demo585.insert({
... firstName: 'Chris',
... lastName: 'Brown',
... SubjectName:"MySQL",
... Marks: [79]
... });
WriteResult({ "nInserted" : 1 })2단계: 저장된 문서 조회하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.
> db.demo585.find();
위 쿼리는 다음과 같은 결과를 출력합니다.
{ "_id" : ObjectId("5e91fd80fd2d90c177b5bcc3"), "firstName" : "John", "lastName" : "Doe", "SubjectName" : "MongoDB", "Marks" : [ 59 ] }
{ "_id" : ObjectId("5e91fd81fd2d90c177b5bcc4"), "firstName" : "Chris", "lastName" : "Brown", "SubjectName" : "MySQL", "Marks" : [ 79 ] }3단계: $push를 사용한 값 추가 쿼리 실행
다음은 firstName, lastName, SubjectName 등을 조건으로 특정 문서를 찾아, 해당 문서의 Marks 배열에 새로운 객체(Value와 Times 필드 포함)를 추가하는 쿼리입니다.
> db.demo585.update({
... firstName: 'John',
... lastName: 'Doe',
... SubjectName:"MongoDB",
... Marks: [59]
... },
... {
... "$push": {
... "Marks": {
... "Value": 59,
... "Times": 3
... }
... }
... }
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })실행 결과에서 nModified가 1로 표시되는데, 이는 조건에 일치한 한 개의 문서가 성공적으로 수정되었음을 의미합니다.
최종 결과 확인
업데이트 후 다시 find() 메서드로 문서를 조회해 보겠습니다.
> db.demo585.find();
출력 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e91fd80fd2d90c177b5bcc3"), "firstName" : "John", "lastName" : "Doe", "SubjectName" : "MongoDB", "Marks" :
[ 59, { "Value" : 59, "Times" : 3 }
] }
{ "_id" : ObjectId("5e91fd81fd2d90c177b5bcc4"), "firstName" : "Chris", "lastName" : "Brown", "SubjectName" : "MySQL", "Marks" : [ 79 ] }결과를 보면 John Doe 문서의 Marks 배열 끝에 { "Value" : 59, "Times" : 3 } 객체가 성공적으로 추가된 것을 확인할 수 있습니다. 반면 업데이트 조건에 해당하지 않는 Chris Brown의 문서는 원본 그대로 유지됩니다. 이처럼 $push 연산자를 활용하면 기존 배열 구조를 변경하지 않고도 원하는 위치에 새로운 데이터를 손쉽게 추가할 수 있습니다.