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

MongoDB에서 문자열 비교하기: $strcasecmp 연산자 완벽 가이드

MongoDB 문자열 비교 개요

MongoDB에서 두 문자열을 비교해야 할 때는 $strcasecmp 연산자를 사용하면 됩니다. 이 연산자는 두 문자열을 대소문자를 구분하지 않고(case-insensitive) 비교하며, 그 결과로 다음 세 가지 값 중 하나를 반환합니다.

  • 1 : 첫 번째 문자열이 두 번째 문자열보다 “큰” 경우
  • 0 : 두 문자열이 같은 경우
  • -1 : 첫 번째 문자열이 두 번째 문자열보다 “작은” 경우

그럼 실제 예제를 통해 $strcasecmp의 동작 방식을 살펴보겠습니다.

1. 샘플 컬렉션 생성

먼저 테스트용 문서들을 담은 컬렉션을 생성합니다.

> db.demo490.insertOne({"Name1":"John","Name2":"john"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8496ccb0f3fa88e22790bb")
}
> db.demo490.insertOne({"Name1":"David","Name2":"Bob"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8496d9b0f3fa88e22790bc")
}
> db.demo490.insertOne({"Name1":"Carol","Name2":"Carol"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e8496e5b0f3fa88e22790bd")
}

위 코드는 총 세 개의 문서를 삽입합니다. 각 문서는 비교할 두 개의 필드(Name1, Name2)를 가지고 있습니다.

2. 저장된 문서 확인하기

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

> db.demo490.find();

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

{ "_id" : ObjectId("5e8496ccb0f3fa88e22790bb"), "Name1" : "John", "Name2" : "john" }
{ "_id" : ObjectId("5e8496d9b0f3fa88e22790bc"), "Name1" : "David", "Name2" : "Bob" }
{ "_id" : ObjectId("5e8496e5b0f3fa88e22790bd"), "Name1" : "Carol", "Name2" : "Carol" }

3. $strcasecmp로 문자열 비교 실행

이제 애그리게이션 파이프라인의 $project 단계에서 $strcasecmp 연산자를 적용하여 두 필드를 비교합니다.

> db.demo490.aggregate(
... [
...     {
...        $project:
...        {
...           Name1: 1,
...           Name2: 1,
...           Result: { $strcasecmp: [ "$Name1", "$Name2" ] }
...        }
...     }
... ]
... )

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

{ "_id" : ObjectId("5e8496ccb0f3fa88e22790bb"), "Name1" : "John", "Name2" : "john", "Result" : 0 }
{ "_id" : ObjectId("5e8496d9b0f3fa88e22790bc"), "Name1" : "David", "Name2" : "Bob", "Result" : 1 }
{ "_id" : ObjectId("5e8496e5b0f3fa88e22790bd"), "Name1" : "Carol", "Name2" : "Carol", "Result" : 0 }

결과 분석

  • John vs john → 결과값 0: 대소문자가 달라도 같은 문자열로 판단됩니다.
  • David vs Bob → 결과값 1: 사전순으로 “David”가 “Bob”보다 뒤에 오므로(더 크므로) 1을 반환합니다.
  • Carol vs Carol → 결과값 0: 완전히 동일한 문자열입니다.

이처럼 $strcasecmp는 대소문자 차이를 무시하고 문자열의 순서만 비교하기 때문에, 이름 검색 정규화나 데이터 중복 검사 등 다양한 상황에서 유용하게 활용할 수 있습니다.