MongoDB에서 _id 필드 이름을 변경할 수 있나요?
네, 가능합니다. MongoDB의 집계 파이프라인(aggregation pipeline)에서 $project 단계를 사용하면 _id 필드를 원하는 다른 이름으로 손쉽게 변경할 수 있습니다.
이 글에서는 실제 예제를 통해 컬렉션 생성부터 _id 필드 이름 변경까지 전 과정을 살펴보겠습니다.
1. 테스트용 컬렉션 생성하기
먼저 insertOne() 메서드를 사용해 문서를 저장할 컬렉션을 만들어 보겠습니다.
> db.renameIdDemo.insertOne({"StudentName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9a1760353decbc2fc927c5")
}
> db.renameIdDemo.insertOne({"StudentName":"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9a1765353decbc2fc927c6")
}
> db.renameIdDemo.insertOne({"StudentName":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c9a176b353decbc2fc927c7")
}2. 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.renameIdDemo.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5c9a1760353decbc2fc927c5"), "StudentName" : "Chris" }
{ "_id" : ObjectId("5c9a1765353decbc2fc927c6"), "StudentName" : "Robert" }
{ "_id" : ObjectId("5c9a176b353decbc2fc927c7"), "StudentName" : "David" }3. $project로 _id 필드 이름 변경하기
이제 집계 파이프라인의 $project 단계를 사용해 _id 필드의 이름을 mainId로 변경해 보겠습니다. 핵심은 기존 _id 필드를 제외(_id: 0)하고, 새 필드에 $_id 값을 매핑하는 것입니다.
> db.renameIdDemo.aggregate({ $project: {
... _id: 0,
... mainId: "$_id",
... count: 1,
... sum: 1
... }
... }
... );실행 결과를 확인해 보면, _id가 성공적으로 mainId라는 새로운 이름으로 변경된 것을 볼 수 있습니다.
{ "mainId" : ObjectId("5c9a1760353decbc2fc927c5") }
{ "mainId" : ObjectId("5c9a1765353decbc2fc927c6") }
{ "mainId" : ObjectId("5c9a176b353decbc2fc927c7") }정리
MongoDB에서는 $rename 연산자로 일반 필드의 이름을 변경할 수 있지만, 집계 파이프라인 내부에서는 $project를 사용해야 합니다. _id: 0으로 기존 필드를 숨기고 새 필드명에 $_id 값을 할당하는 방식이면, 그룹 집계($group) 이후에도 동일하게 적용할 수 있습니다. 이 방법은 리포트 작성이나 API 응답 형식을 가공할 때 특히 유용합니다.