Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 ObjectId를 문자열로 변환하는 방법 ($toString 연산자 활용)

MongoDB에서 ObjectId는 기본적으로 문서의 고유 식별자로 사용되는 12바이트 BSON 타입입니다. 하지만 애플리케이션 개발 과정에서 이 ObjectId를 문자열 형태로 변환해야 하는 경우가 자주 발생합니다. 예를 들어, API 응답으로 ID를 전달하거나 다른 컬렉션과 문자열 기반으로 데이터를 매칭할 때가 대표적입니다.

$toString 연산자란?

MongoDB에서 ObjectId를 문자열로 변환하려면 집계 파이프라인(aggregate)에서 $toString 연산자를 사용하면 됩니다. 이 연산자는 MongoDB 4.0부터 지원되며, ObjectId뿐만 아니라 다양한 BSON 타입을 문자열로 손쉽게 변환할 수 있습니다.

개념을 이해하기 위해 먼저 샘플 컬렉션을 생성하고 문서를 삽입해 보겠습니다.

1. 샘플 컬렉션 생성 및 데이터 삽입

아래 쿼리로 objectidToStringDemo 컬렉션에 문서를 차례대로 삽입합니다.

> 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() 메서드와 pretty()를 함께 사용하면 컬렉션에 저장된 모든 문서를 보기 좋게 출력할 수 있습니다.

> db.objectidToStringDemo.find().pretty();

실행 결과는 다음과 같습니다. 각 문서의 _id 필드에 ObjectId 타입의 값이 저장된 것을 확인할 수 있습니다.

{ "_id" : ObjectId("5c92b80036de59bd9de0639d"), "UserName" : "John" }
{ "_id" : ObjectId("5c92b80436de59bd9de0639e"), "UserName" : "Chris" }
{ "_id" : ObjectId("5c92b80936de59bd9de0639f"), "UserName" : "Larry" }
{ "_id" : ObjectId("5c92b81836de59bd9de063a0"), "UserName" : "Robert" }

3. $toString으로 ObjectId를 문자열로 변환하기

이제 집계 파이프라인에서 $project 단계와 $toString 연산자를 조합하여 ObjectId를 문자열 값으로 변환해 보겠습니다.

> db.objectidToStringDemo.aggregate([
   ... {
      ... $project: {
         ... _id: {
            ... $toString: "$_id"
         ... }
      ... }
   ... }
... ]
... );

실행 결과를 살펴보면, 기존에 ObjectId(...) 형태였던 _id 값이 따옴표로 감싸진 일반 문자열로 변환된 것을 확인할 수 있습니다.

{ "_id" : "5c92b80036de59bd9de0639d" }
{ "_id" : "5c92b80436de59bd9de0639e" }
{ "_id" : "5c92b80936de59bd9de0639f" }
{ "_id" : "5c92b81836de59bd9de063a0" }

마무리 및 참고 사항

이처럼 MongoDB에서는 $toString 연산자 하나만으로 ObjectId를 간단하게 문자열로 변환할 수 있습니다. 몇 가지 추가로 알아두면 좋은 내용은 다음과 같습니다.

  • 버전 제한: $toString은 MongoDB 4.0 이상에서만 사용할 수 있습니다. 그 이전 버전에서는 $substr 등의 우회 방법을 사용해야 합니다.
  • 다른 필드 조합: $concat 연산자와 함께 사용하면 변환된 문자열을 다른 텍스트와 결합하여 새로운 필드를 만들 수도 있습니다.
  • 역변환: 반대로 문자열을 ObjectId로 변환할 때는 $toObjectId 연산자를 사용합니다.
  • 주의점: 유효하지 않은 값을 변환하려고 하면 에러가 발생하므로, 필요하다면 $convert 연산자의 onError 옵션을 활용하는 것이 안전합니다.