MongoDB에서 MySQL LIKE 문을 구현하는 방법
MySQL에서 자주 사용하는 LIKE 문은 특정 패턴과 일치하는 문자열을 검색할 때 유용합니다. MongoDB에는 LIKE 문이 직접 존재하지 않지만, 대신 $regex 연산자(정규 표현식)를 사용하면 동일한 기능을 손쉽게 구현할 수 있습니다.
이번 글에서는 실제 예제를 통해 MongoDB에서 LIKE 문과 같은 패턴 매칭을 수행하는 방법을 단계별로 살펴보겠습니다.
1. 테스트용 컬렉션 생성 및 데이터 삽입
먼저 예제에 사용할 컬렉션을 만들고 문서를 삽입합니다. insertOne() 메서드를 사용하여 이름(Name) 필드를 가진 문서들을 추가합니다.
> db.likeInMongoDBDemo.insertOne({"Name" : "Sam"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd6922857806ebf1256f123")
}
> db.likeInMongoDBDemo.insertOne({"Name" : "John" });
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd6923157806ebf1256f124")
}
> db.likeInMongoDBDemo.insertOne({"Name" : "Scott"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd6924557806ebf1256f125")
}
> db.likeInMongoDBDemo.insertOne({"Name" : "Sean"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd6924f57806ebf1256f126")
}
> db.likeInMongoDBDemo.insertOne({"Name" : "Samuel"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd6925857806ebf1256f127")
}2. 전체 문서 조회하기
데이터가 정상적으로 삽입되었는지 확인하기 위해 find() 메서드와 pretty() 메서드를 사용해 컬렉션의 모든 문서를 출력해 보겠습니다.
> db.likeInMongoDBDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5cd6922857806ebf1256f123"), "Name" : "Sam" }
{ "_id" : ObjectId("5cd6923157806ebf1256f124"), "Name" : "John" }
{ "_id" : ObjectId("5cd6924557806ebf1256f125"), "Name" : "Scott" }
{ "_id" : ObjectId("5cd6924f57806ebf1256f126"), "Name" : "Sean" }
{ "_id" : ObjectId("5cd6925857806ebf1256f127"), "Name" : "Samuel" }3. $regex를 사용한 LIKE 문 구현
이제 핵심 부분입니다. MySQL의 LIKE '%Sam%'과 동일한 결과를 얻으려면 MongoDB에서 $regex 연산자를 사용하면 됩니다. 아래 쿼리는 Name 필드에 "Sam"이라는 문자열이 포함된 모든 문서를 검색합니다.
> db.likeInMongoDBDemo.find({"Name":{$regex:"Sam"}});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5cd6922857806ebf1256f123"), "Name" : "Sam" }
{ "_id" : ObjectId("5cd6925857806ebf1256f127"), "Name" : "Samuel" }추가 활용 팁
$regex는 단순 포함 검색 외에도 다양하게 응용할 수 있습니다.
- 특정 문자열로 시작하는 경우 (MySQL의
LIKE 'Sam%'):{"Name": {$regex: "^Sam"}} - 특정 문자열로 끝나는 경우 (MySQL의
LIKE '%am'):{"Name": {$regex: "am$"}} - 대소문자 구분 없이 검색:
{"Name": {$regex: "sam", $options: "i"}}
이처럼 MongoDB의 $regex 연산자를 활용하면 MySQL의 LIKE 문에서 제공하는 패턴 매칭 기능을 그대로 구현할 수 있으며, 정규 표현식의 강력한 문법까지 함께 사용할 수 있다는 장점이 있습니다.