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

MongoDB findOne()에서 정규식($regex) 활용 방법

MongoDB findOne()에서 정규식 사용하기

MongoDB의 findOne() 메서드는 컬렉션에서 지정된 쿼리 조건을 만족하는 단 하나의 문서를 반환합니다. 조건에 일치하는 문서가 여러 개라도 가장 먼저 발견된 문서 하나만 돌려준다는 점이 find()와의 큰 차이입니다.

이번 글에서는 findOne() 안에서 정규식($regex)을 사용해 문자열 패턴으로 문서를 검색하는 방법을 알아보겠습니다.

1. 테스트용 컬렉션 생성

먼저 예제로 사용할 컬렉션에 문서를 삽입합니다.

> db.demo655.insertOne({subject:"MySQL"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ea050254deddd72997713cc")
}
> db.demo655.insertOne({subject:"MongoDB"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ea0502b4deddd72997713cd")
}
> db.demo655.insertOne({subject:"Java"});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ea050314deddd72997713ce")
}

2. find()로 전체 문서 확인하기

find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다.

> db.demo655.find();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5ea050254deddd72997713cc"), "subject" : "MySQL" }
{ "_id" : ObjectId("5ea0502b4deddd72997713cd"), "subject" : "MongoDB" }
{ "_id" : ObjectId("5ea050314deddd72997713ce"), "subject" : "Java" }

3. findOne()에서 정규식으로 검색하기

$regex 연산자를 사용하면 특정 패턴과 일치하는 문자열을 가진 문서를 찾을 수 있습니다. 아래 예제는 subject 필드 값에 문자 'M'이 포함된 첫 번째 문서를 조회하는 쿼리입니다.

> db.demo655.findOne({subject:{$regex:/M/}});

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

{ "_id" : ObjectId("5ea050254deddd72997713cc"), "subject" : "MySQL" }

정규식 활용 팁

  • 대소문자 무시: /M/i 처럼 i 옵션을 추가하면 대소문자를 구분하지 않고 검색합니다.
  • 부분 일치: /M/은 'MySQL', 'MongoDB'처럼 M이 포함된 모든 값을 매칭합니다.
  • 시작·끝 패턴: /^M/은 'M'으로 시작하는 값만, /L$/은 'L'로 끝나는 값만 찾습니다.
  • findOne() 특성: 조건에 맞는 문서가 여러 개여도 삽입 순서상 가장 앞선 문서 하나만 반환됩니다.

이처럼 findOne()과 $regex를 함께 사용하면 복잡한 문자열 조건 검색도 간단하게 처리할 수 있습니다.