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

MongoDB에서 LIKE 조건으로 레코드 검색하는 방법

MongoDB에서 LIKE 쿼리 구현하기

SQL의 LIKE 연산자처럼 특정 패턴과 일치하는 문자열을 검색하려면, MongoDB에서는 정규 표현식(Regex)을 활용하면 됩니다. 이 글에서는 실제 예제를 통해 MongoDB에서 LIKE와 유사한 방식으로 레코드를 조회하는 방법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성

먼저 문서(document)를 포함하는 컬렉션을 생성합니다.

> db.likeDemo.insertOne({"Name":"John",Age:32});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cb84984623186894665ae41")
}
> db.likeDemo.insertOne({"Name":"Chris",Age:25});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cb84991623186894665ae42")
}
> db.likeDemo.insertOne({"Name":"Carol",Age:22});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cb849a1623186894665ae43")
}
> db.likeDemo.insertOne({"Name":"Johnny",Age:22});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cb849b2623186894665ae44")
}
> db.likeDemo.insertOne({"Name":"James",Age:27});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5cb849bb623186894665ae45")
}

위 명령은 'likeDemo'라는 컬렉션에 이름과 나이 정보를 가진 다섯 개의 문서를 삽입합니다.

2. 전체 문서 확인하기

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

> db.likeDemo.find().pretty();

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

{
   "_id" : ObjectId("5cb84984623186894665ae41"),
   "Name" : "John",
   "Age" : 32
}
{
   "_id" : ObjectId("5cb84991623186894665ae42"),
   "Name" : "Chris",
   "Age" : 25
}
{
   "_id" : ObjectId("5cb849a1623186894665ae43"),
   "Name" : "Carol",
   "Age" : 22
}
{
   "_id" : ObjectId("5cb849b2623186894665ae44"),
   "Name" : "Johnny",
   "Age" : 22
}
{
   "_id" : ObjectId("5cb849bb623186894665ae45"),
   "Name" : "James",
   "Age" : 27
}

3. LIKE와 유사한 패턴 매칭 쿼리 실행

이제 정규 표현식을 사용해 SQL의 LIKE 'Jo%'와 동일한 결과, 즉 Name 필드가 "Jo"로 시작하는 레코드를 조회해 보겠습니다.

> db.likeDemo.find({Name: /^Jo/i } ).pretty();

여기서 사용된 정규 표현식의 의미는 다음과 같습니다.
- ^ : 문자열의 시작을 나타냅니다.
- /i : 대소문자를 구분하지 않도록 하는 옵션(case-insensitive)입니다.

실행 결과, "Jo"로 시작하는 두 개의 문서만 반환됩니다.

{
   "_id" : ObjectId("5cb84984623186894665ae41"),
   "Name" : "John",
   "Age" : 32
}
{
   "_id" : ObjectId("5cb849b2623186894665ae44"),
   "Name" : "Johnny",
   "Age" : 22
}

추가: 다양한 LIKE 패턴 응용

정규 표현식의 위치를 조절하면 SQL LIKE의 여러 패턴을 그대로 재현할 수 있습니다.

특정 문자열로 끝나는 경우 (SQL의 LIKE '%n'):
db.likeDemo.find({Name: /n$/ })

문자열 중간에 포함된 경우 (SQL의 LIKE '%oh%'):
db.likeDemo.find({Name: /oh/ })

정확히 일치하는 경우 (SQL의 LIKE 'John'):
db.likeDemo.find({Name: /^John$/ })

이처럼 MongoDB에서는 정규 표현식 하나로 SQL의 LIKE 연산자가 제공하는 대부분의 문자열 검색 기능을 손쉽게 구현할 수 있습니다. 다만, 대량의 데이터를 다룰 때는 인덱스를 활용할 수 있도록 접두사(prefix) 기반 검색(^으로 시작하는 패턴)을 사용하는 것이 성능 면에서 유리합니다.