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

MongoDB에서 필드에 특정 문자열이 포함되어 있는지 확인하는 방법

MongoDB에서 특정 필드에 원하는 문자열이 포함되어 있는지 확인하려면 $regex 연산자를 사용하면 됩니다. $regex는 정규 표현식을 기반으로 패턴 매칭을 수행하는 연산자로, 부분 문자열 검색에 매우 유용합니다.

$regex 연산자 기본 문법

기본적인 사용 문법은 다음과 같습니다.

db.yourCollectionName.findOne({"yourFieldName":{$regex:".*yourValue.*"}});

여기서 .*yourValue.* 패턴은 해당 값 앞뒤로 어떤 문자든 올 수 있음을 의미합니다. 즉, 필드 값의 어느 위치에든 지정한 문자열이 포함되어 있으면 매칭됩니다.

예제 컬렉션 생성하기

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

> db.checkFieldContainsStringDemo.insertOne({"Id":1,"Name":"John"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c77d762fc4e719b197a12ed")
}
> db.checkFieldContainsStringDemo.insertOne({"Id":2,"Name":"Johnson"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c77d76bfc4e719b197a12ee")
}
> db.checkFieldContainsStringDemo.insertOne({"Id":3,"Name":"Carol"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c77d774fc4e719b197a12ef")
}
> db.checkFieldContainsStringDemo.insertOne({"Id":4,"Name":"Mike"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c77d77cfc4e719b197a12f0")
}
> db.checkFieldContainsStringDemo.insertOne({"Id":5,"Name":"Sam"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c77d784fc4e719b197a12f1")
}
> db.checkFieldContainsStringDemo.insertOne({"Id":6,"Name":"Larry"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c77d78cfc4e719b197a12f2")
}

저장된 전체 문서 조회하기

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

> db.checkFieldContainsStringDemo.find();

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

{ "_id" : ObjectId("5c77d762fc4e719b197a12ed"), "Id" : 1, "Name" : "John" }
{ "_id" : ObjectId("5c77d76bfc4e719b197a12ee"), "Id" : 2, "Name" : "Johnson" }
{ "_id" : ObjectId("5c77d774fc4e719b197a12ef"), "Id" : 3, "Name" : "Carol" }
{ "_id" : ObjectId("5c77d77cfc4e719b197a12f0"), "Id" : 4, "Name" : "Mike" }
{ "_id" : ObjectId("5c77d784fc4e719b197a12f1"), "Id" : 5, "Name" : "Sam" }
{ "_id" : ObjectId("5c77d78cfc4e719b197a12f2"), "Id" : 6, "Name" : "Larry" }

특정 문자열이 포함된 필드 검색하기

이제 Name 필드에 "Johnson"이라는 문자열이 포함된 문서를 찾는 쿼리를 실행해 보겠습니다.

> db.checkFieldContainsStringDemo.findOne({"Name":{$regex:".*Johnson.*"}});

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

{
    "_id" : ObjectId("5c77d76bfc4e719b197a12ee"),
    "Id" : 2,
    "Name" : "Johnson"
}

추가 팁: 대소문자 구분 없이 검색하기

대소문자를 구분하지 않고 검색하려면 $options 옵션에 i 값을 추가하면 됩니다.

> db.checkFieldContainsStringDemo.findOne({"Name":{$regex:".*johnson.*", $options:'i'}});

또한 정규 표현식에서 .*는 생략 가능하므로, 다음과 같이 더 간결하게 작성할 수도 있습니다.

> db.checkFieldContainsStringDemo.find({"Name":{$regex:"Johnson"}});

이처럼 $regex 연산자를 활용하면 MongoDB에서 손쉽게 부분 문자열 매칭 검색을 수행할 수 있습니다. 다만 대량의 데이터에서 정규 표현식 검색은 인덱스를 활용하기 어려울 수 있으므로, 성능이 중요한 환경에서는 텍스트 인덱스(Text Index)나 Atlas Search 사용도 함께 고려해 보시기 바랍니다.