MongoDB에서 기존 문서의 배열 필드에 새 항목을 추가하려면 $push 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 컬렉션 생성부터 항목 추가, 결과 확인까지 단계별로 살펴보겠습니다.
1. 예제용 컬렉션 생성하기
먼저 insertOne() 메서드를 사용해 학생 정보가 담긴 문서 3개를 updateDemo 컬렉션에 삽입합니다. 각 문서는 학생 이름(StudentName)과 주요 과목 배열(StudentCoreSubject)로 구성되어 있습니다.
> db.updateDemo.insertOne({"StudentName":"Larry","StudentCoreSubject":["Java","C"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c98ba78330fd0aa0d2fe4c9")
}
> db.updateDemo.insertOne({"StudentName":"Robert","StudentCoreSubject":["C++","MongoDB"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c98ba8b330fd0aa0d2fe4ca")
}
> db.updateDemo.insertOne({"StudentName":"Chris","StudentCoreSubject":["Python"]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c98ba9b330fd0aa0d2fe4cb")
}2. 저장된 문서 조회하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다. pretty()를 함께 사용하면 결과를 보기 좋게 정렬된 형태로 출력합니다.
> db.updateDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.
{
"_id" : ObjectId("5c98ba78330fd0aa0d2fe4c9"),
"StudentName" : "Larry",
"StudentCoreSubject" : [
"Java",
"C"
]
}
{
"_id" : ObjectId("5c98ba8b330fd0aa0d2fe4ca"),
"StudentName" : "Robert",
"StudentCoreSubject" : [
"C++",
"MongoDB"
]
}
{
"_id" : ObjectId("5c98ba9b330fd0aa0d2fe4cb"),
"StudentName" : "Chris",
"StudentCoreSubject" : [
"Python"
]
}3. $push 연산자로 배열에 새 항목 추가하기
이제 $push 연산자를 사용해 특정 문서의 배열에 새 과목인 "MySQL"을 추가해 보겠습니다. update()> 메서드의 첫 번째 인수로 대상 문서를 찾는 조건(여기서는 _id)을 지정하고, 두 번째 인수에 $push 업데이트 내용을 작성합니다.
> db.updateDemo.update(
{ _id: ObjectId("5c98ba78330fd0aa0d2fe4c9") },
{ $push: { "StudentCoreSubject": "MySQL" } }
);
Updated 1 existing record(s) in 2ms
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })실행 결과의 nModified : 1은 하나의 문서가 성공적으로 수정되었음을 의미합니다.
4. 업데이트 결과 확인하기
다시 find() 메서드를 실행해 항목이 실제로 배열에 삽입되었는지 확인합니다.
> db.updateDemo.find().pretty();
출력 결과를 보면 ObjectId가 5c98ba78330fd0aa0d2fe4c9인 Larry의 문서에 "MySQL"이 성공적으로 추가된 것을 확인할 수 있습니다.
{
"_id" : ObjectId("5c98ba78330fd0aa0d2fe4c9"),
"StudentName" : "Larry",
"StudentCoreSubject" : [
"Java",
"C",
"MySQL"
]
}
{
"_id" : ObjectId("5c98ba8b330fd0aa0d2fe4ca"),
"StudentName" : "Robert",
"StudentCoreSubject" : [
"C++",
"MongoDB"
]
}
{
"_id" : ObjectId("5c98ba9b330fd0aa0d2fe4cb"),
"StudentName" : "Chris",
"StudentCoreSubject" : [
"Python"
]
}참고: 중복 없이 항목을 추가하려면?
$push는 동일한 값이 이미 배열에 있더라도 그대로 추가합니다. 만약 중복 값을 허용하지 않고 싶다면 $addToSet 연산자를 사용하는 것이 좋습니다. 또한 최신 MongoDB 버전에서는 update() 대신 updateOne()이나 updateMany() 사용이 권장됩니다.