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

MongoDB에서 SQL의 LIKE처럼 검색하는 방법 완벽 가이드

MongoDB에서 LIKE 검색 구현하기

관계형 데이터베이스의 SQL LIKE 절과 유사한 기능을 MongoDB에서 구현하려면 정규식(Regular Expression)을 활용하면 됩니다. MongoDB는 슬래시(/)로 감싼 정규식 패턴 또는 $regex 연산자를 통해 문자열의 부분 일치 검색을 손쉽게 지원합니다.

기본 문법은 다음과 같습니다:

db.yourCollectionName.find({ "yourFieldName": /.*yourMatchingValue.*/ }).pretty();

여기서 /.*값.*/ 패턴은 해당 필드에 특정 값이 포함된 모든 문서를 의미합니다. 문법을 더 잘 이해하기 위해 실제 예제를 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성

'employee'라는 이름의 컬렉션을 만들고 몇 개의 문서를 삽입해 보겠습니다. 쿼리는 다음과 같습니다:

> db.employee.insert({ "EmployeeName": "John", "EmployeeSalary": 450000 });
WriteResult({ "nInserted": 1 })
> db.employee.insert({ "EmployeeName": "Carol", "EmployeeSalary": 150000 });
WriteResult({ "nInserted": 1 })
> db.employee.insert({ "EmployeeName": "James", "EmployeeSalary": 550000 });
WriteResult({ "nInserted": 1 })
> db.employee.insert({ "EmployeeName": "Jace", "EmployeeSalary": 670000 });
WriteResult({ "nInserted": 1 })
> db.employee.insert({ "EmployeeName": "Larry", "EmployeeSalary": 1000000 });
WriteResult({ "nInserted": 1 })

2. 전체 문서 조회하기

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

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

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

{
    "_id": ObjectId("5c6c0b2e68174aae23f5ef59"),
    "EmployeeName": "John",
    "EmployeeSalary": 450000
}
{
    "_id": ObjectId("5c6c0b3b68174aae23f5ef5a"),
    "EmployeeName": "Carol",
    "EmployeeSalary": 150000
}
{
    "_id": ObjectId("5c6c0b4768174aae23f5ef5b"),
    "EmployeeName": "James",
    "EmployeeSalary": 550000
}
{
    "_id": ObjectId("5c6c0b8f68174aae23f5ef5c"),
    "EmployeeName": "Jace",
    "EmployeeSalary": 670000
}
{
    "_id": ObjectId("5c6c0b9e68174aae23f5ef5d"),
    "EmployeeName": "Larry",
    "EmployeeSalary": 1000000
}

3. LIKE 조건으로 부분 일치 검색하기

이제 이름에 "J"가 포함된 직원만 조회하는 LIKE 스타일의 쿼리를 실행해 보겠습니다:

> db.employee.find({ "EmployeeName": /.*J.*/ }).pretty();

결과적으로 EmployeeName 필드에 "J"가 들어간 John, James, Jace 세 개의 문서만 반환됩니다:

{
    "_id": ObjectId("5c6c0b2e68174aae23f5ef59"),
    "EmployeeName": "John",
    "EmployeeSalary": 450000
}
{
    "_id": ObjectId("5c6c0b4768174aae23f5ef5b"),
    "EmployeeName": "James",
    "EmployeeSalary": 550000
}
{
    "_id": ObjectId("5c6c0b8f68174aae23f5ef5c"),
    "EmployeeName": "Jace",
    "EmployeeSalary": 670000
}

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

SQL의 LIKE처럼 대소문자를 구분하지 않고 검색하고 싶다면 정규식 끝에 i 옵션을 붙이면 됩니다:

> db.employee.find({ "EmployeeName": /.*j.*/i }).pretty();

또는 $regex 연산자를 사용하는 방법도 있습니다:

> db.employee.find({ "EmployeeName": { $regex: "J", $options: "i" } }).pretty();

이처럼 MongoDB에서는 정규식 패턴만 익히면 SQL의 LIKE 연산자가 제공하는 부분 일치 검색 기능을 그대로 구현할 수 있습니다. 검색 성능이 중요한 대용량 컬렉션이라면 해당 필드에 인덱스를 생성하고, 가능한 한 앞부분 일치(prefix) 패턴을 사용하는 것이 좋습니다.