MongoDB의 $toString 연산자는 다양한 타입의 값을 문자열로 변환할 때 사용되는 강력한 도구입니다. 특히 집계 파이프라인(aggregate)에서 ObjectId 타입의 _id 필드를 문자열로 바꿔야 할 때 유용하게 활용됩니다. 이 글에서는 실제 예제를 통해 $toString의 사용법을 단계별로 살펴보겠습니다.
1. 예제용 컬렉션 생성하기
먼저 개념을 이해하기 위해 문서가 포함된 컬렉션을 생성하겠습니다. 컬렉션을 만드는 쿼리는 다음과 같습니다.
> db.objectidToStringDemo.insertOne({"UserName":"John"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c92b80036de59bd9de0639d")
}
> db.objectidToStringDemo.insertOne({"UserName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c92b80436de59bd9de0639e")
}
> db.objectidToStringDemo.insertOne({"UserName":"Larry"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c92b80936de59bd9de0639f")
}
> db.objectidToStringDemo.insertOne({"UserName":"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c92b81836de59bd9de063a0")
}
2. 저장된 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다. 쿼리는 다음과 같습니다.
> db.objectidToStringDemo.find().pretty();
실행 결과는 아래와 같습니다.
{ "_id" : ObjectId("5c92b80036de59bd9de0639d"), "UserName" : "John" }
{ "_id" : ObjectId("5c92b80436de59bd9de0639e"), "UserName" : "Chris" }
{ "_id" : ObjectId("5c92b80936de59bd9de0639f"), "UserName" : "Larry" }
{ "_id" : ObjectId("5c92b81836de59bd9de063a0"), "UserName" : "Robert" }
출력 결과를 보면 각 문서의 _id 필드가 ObjectId 타입으로 저장되어 있는 것을 확인할 수 있습니다.
3. $toString으로 ObjectId를 문자열로 변환하기
이제 MongoDB 집계(aggregate)에서 ObjectId를 문자열 값으로 변환하는 쿼리를 살펴보겠습니다. $project 단계 안에서 $toString 연산자에 $_id 필드를 전달하면 됩니다.
> db.objectidToStringDemo.aggregate([
... {
... $project: {
... _id: {
... $toString: "$_id"
... }
... }
... }
... ]
... );
위 쿼리의 실행 결과는 다음과 같습니다.
{ "_id" : "5c92b80036de59bd9de0639d" }
{ "_id" : "5c92b80436de59bd9de0639e" }
{ "_id" : "5c92b80936de59bd9de0639f" }
{ "_id" : "5c92b81836de59bd9de063a0" }
출력 결과에서 _id 값이 더 이상 ObjectId(...) 형태가 아니라 따옴표로 감싸진 일반 문자열로 반환된 것을 확인할 수 있습니다. 이렇게 변환된 문자열은 애플리케이션 간 데이터 전송이나 JSON 직렬화 작업 시 특히 유용합니다.
4. $toObjectId로 원래 ObjectId 복원하기
반대로 문자열로 변환된 값을 다시 원래의 ObjectId 형태로 되돌려야 한다면 $toObjectId 연산자를 사용하면 됩니다.
> db.objectidToStringDemo.aggregate([ { $project: { _id: { $toObjectId: "$_id" } } } ] );
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5c92b80036de59bd9de0639d") }
{ "_id" : ObjectId("5c92b80436de59bd9de0639e") }
{ "_id" : ObjectId("5c92b80936de59bd9de0639f") }
{ "_id" : ObjectId("5c92b81836de59bd9de063a0") }
정리
MongoDB에서 $toString은 ObjectId를 비롯한 여러 타입의 값을 손쉽게 문자열로 변환할 수 있는 집계 연산자입니다. 반대 방향의 변환이 필요할 때는 $toObjectId를 사용하면 됩니다. 두 연산자를 적절히 활용하면 데이터 조회, 변환, 전송 과정에서 타입 호환성 문제를 효과적으로 해결할 수 있습니다.