MongoDB 컬렉션의 모든 문서에 새 필드 추가하기
MongoDB에서 기존 컬렉션의 모든 문서에 새로운 필드를 추가하려면 $addFields 집계 연산자를 사용하면 됩니다. 이 글에서는 예제 컬렉션을 직접 만들어 보고, $addFields를 활용해 모든 문서에 새 필드를 일괄 추가하는 과정을 단계별로 살펴보겠습니다.
1단계: 샘플 컬렉션 생성
먼저 insertOne() 메서드를 사용해 demo712 컬렉션에 문서를 차례로 삽입합니다.
> db.demo712.insertOne({"Name":"John"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea85f675d33e20ed1097b82")
}
> db.demo712.insertOne({"Name":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea85f6a5d33e20ed1097b83")
}
> db.demo712.insertOne({"Name":"Bob"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea85f6e5d33e20ed1097b84")
}2단계: find()로 전체 문서 확인
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.demo712.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5ea85f675d33e20ed1097b82"), "Name" : "John" }
{ "_id" : ObjectId("5ea85f6a5d33e20ed1097b83"), "Name" : "Chris" }
{ "_id" : ObjectId("5ea85f6e5d33e20ed1097b84"), "Name" : "Bob" }현재 각 문서에는 _id와 Name 필드만 존재합니다.
3단계: $addFields로 새 필드 추가
다음은 aggregate() 파이프라인 안에서 $addFields를 사용하여 모든 문서에 TeacherName이라는 새 필드를 추가하는 쿼리입니다.
> db.demo712.aggregate([
... {
... $addFields:
... {
... "TeacherName":"Robert"
... }
... }
... ]
... );
쿼리를 실행하면 다음과 같이 모든 문서에 TeacherName 필드가 추가된 결과를 확인할 수 있습니다.
{ "_id" : ObjectId("5ea85f675d33e20ed1097b82"), "Name" : "John", "TeacherName" : "Robert" }
{ "_id" : ObjectId("5ea85f6a5d33e20ed1097b83"), "Name" : "Chris", "TeacherName" : "Robert" }
{ "_id" : ObjectId("5ea85f6e5d33e20ed1097b84"), "Name" : "Bob", "TeacherName" : "Robert" }참고: 변경 사항을 영구적으로 저장하려면?
$addFields는 집계 파이프라인의 출력 결과에만 필드를 추가하는 연산으로, 실제 컬렉션에는 변경 사항이 저장되지 않습니다. 따라서 모든 문서에 새 필드를 영구적으로 추가하고 싶다면 updateMany()와 $set 연산자를 함께 사용하는 것이 좋습니다.
> db.demo712.updateMany(
... {},
... { $set: { "TeacherName": "Robert" } }
... );
이처럼 상황에 따라 $addFields(조회 시 변환)와 updateMany()(실제 데이터 수정)를 적절히 선택해 사용하면 됩니다.