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

MongoDB에서 문자열을 ObjectId로 변환하는 방법 ($toObjectId 활용)

MongoDB에서 문자열을 ObjectId로 변환하는 방법

MongoDB를 사용하다 보면 문자열(String) 형태로 저장된 값을 ObjectId 타입으로 변환해야 하는 경우가 종종 있습니다. 예를 들어, 애플리케이션에서 ObjectId를 문자열로 저장한 후 이를 다시 ObjectId로 변환하여 참조나 조인 작업에 활용할 때 유용합니다. 이럴 때 집계 파이프라인의 $toObjectId 연산자를 사용하면 간단하게 해결할 수 있습니다.

1. 컬렉션 생성 및 문서 삽입

먼저 데모용 컬렉션을 생성하고, 문자열 형태의 ID 값을 가진 문서를 삽입해 보겠습니다.

> db.demo95.insertOne({"Id":"5ab9cbe531c2ab715d42129a"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e2d5ef5b8903cdd865577ac")
}

2. 저장된 문서 확인

find() 메서드를 사용하여 컬렉션의 모든 문서를 조회합니다.

> db.demo95.find();

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e2d5ef5b8903cdd865577ac"), "Id" : "5ab9cbe531c2ab715d42129a" }

출력 결과를 보면 "Id" 필드가 문자열 타입으로 저장되어 있는 것을 확인할 수 있습니다.

3. $toObjectId로 문자열 변환하기

다음은 $toObjectId 연산자를 사용하여 문자열을 ObjectId로 변환하는 집계 쿼리입니다.

> db.demo95.aggregate([ { "$addFields": { "d" : { "$toObjectId": "$Id" } }} ])

실행 결과는 다음과 같습니다.

{ "_id" : ObjectId("5e2d5ef5b8903cdd865577ac"), "Id" : "5ab9cbe531c2ab715d42129a", "d" : ObjectId("5ab9cbe531c2ab715d42129a") }

쿼리 동작 원리

$addFields 단계는 기존 문서에 새로운 필드를 추가하는 역할을 합니다. 위 쿼리에서는 "d"라는 새 필드를 생성하고, 그 값으로 $toObjectId를 적용하여 "Id" 필드의 문자열 값을 ObjectId로 변환한 결과를 저장합니다. 원본 "Id" 필드는 그대로 유지되며, 변환된 값은 새 필드 "d"에 담기게 됩니다.

참고로 $toObjectId는 24자리 16진수 형식의 유효한 ObjectId 문자열만 변환할 수 있으며, 잘못된 형식의 문자열이 입력되면 에러가 발생합니다. 변환이 실패할 수 있는 데이터를 안전하게 처리하려면 $convert 연산자와 onError 옵션을 함께 사용하는 것도 좋은 방법입니다.