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

MongoDB 집계(Aggregation)에서 부분 문자열 추출하기 – $substr 연산자 활용 가이드


MongoDB에서 문자열 필드의 일부분, 즉 부분 문자열(substring)을 추출하려면 집계(aggregation) 파이프라인에서 $substr 연산자를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 $substr의 사용 방법을 단계별로 살펴보겠습니다.

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

먼저 insertOne() 메서드를 사용해 demo176 컬렉션에 문서를 생성합니다.

> db.demo176.insertOne({"ProductName":"PRODUCT-1"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3843a09e4f06af551997ef")
}
> db.demo176.insertOne({"ProductName":"PRODUCT-102"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3843a69e4f06af551997f0")
}
> db.demo176.insertOne({"ProductName":"PRODUCT-105"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e3843aa9e4f06af551997f1")
}

2. 삽입된 문서 조회하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다.

> db.demo176.find();

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5e3843a09e4f06af551997ef"), "ProductName" : "PRODUCT-1" }
{ "_id" : ObjectId("5e3843a69e4f06af551997f0"), "ProductName" : "PRODUCT-102" }
{ "_id" : ObjectId("5e3843aa9e4f06af551997f1"), "ProductName" : "PRODUCT-105" }

3. $substr로 부분 문자열 추출하기

다음은 MongoDB 집계에서 부분 문자열을 가져오는 쿼리입니다. $project 단계 안에서 $substr 연산자를 사용하며, 배열 형태로 [필드명, 시작 인덱스, 길이]를 지정합니다. 여기서는 0번째 문자부터 7글자를 추출하도록 설정했습니다.

> db.demo176.aggregate(
...    [
...       {
...          $project:
...             {
...
...                ProductName: { $substr: [ "$ProductName", 0, 7] }
...
...             }
...       }
...    ]
...)

실행 결과는 다음과 같습니다. 세 문서 모두 앞 7글자인 "PRODUCT"만 남은 것을 확인할 수 있습니다.

{ "_id" : ObjectId("5e3843a09e4f06af551997ef"), "ProductName" : "PRODUCT" }
{ "_id" : ObjectId("5e3843a69e4f06af551997f0"), "ProductName" : "PRODUCT" }
{ "_id" : ObjectId("5e3843aa9e4f06af551997f1"), "ProductName" : "PRODUCT" }

참고: $substrBytes와 $substrCP

$substr은 MongoDB 3.4부터 더 이상 권장되지 않으며(deprecated), 대신 $substrBytes 또는 $substrCP 사용이 권장됩니다. 특히 한글처럼 여러 바이트로 표현되는 문자를 다룰 때는 코드 포인트(code point) 기준으로 동작하는 $substrCP를 사용하는 것이 안전합니다.