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

MongoDB $in 연산자에서 정규식(Regex) 사용하는 방법

MongoDB에서 $in 연산자와 함께 정규식(Regular Expression)을 사용할 수 있을까요? 답은 입니다. $in 배열 안에 정규식 패턴을 직접 넣으면, 해당 패턴과 일치하는 값을 가진 문서를 손쉽게 조회할 수 있습니다.

1. 샘플 컬렉션 생성하기

먼저 데모용 컬렉션을 만들고 문서를 삽입해 보겠습니다. 각 문서는 이름 목록(ListOfNames)을 배열 형태로 가지고 있습니다.

> db.demo675.insertOne({
... "ListOfNames":["John","Chris","David"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea3f5b404263e90dac943ef")
}
> db.demo675.insertOne({ "ListOfNames":["Bob","Johnson","Sam"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea3f5c804263e90dac943f0")
}
> db.demo675.insertOne({ "ListOfNames":["Jace","Sam"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea3f5d304263e90dac943f1")
}

2. find() 메서드로 전체 문서 조회하기

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

> db.demo675.find();

위 쿼리는 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5ea3f5b404263e90dac943ef"), "ListOfNames" : [ "John", "Chris", "David" ] }
{ "_id" : ObjectId("5ea3f5c804263e90dac943f0"), "ListOfNames" : [ "Bob", "Johnson", "Sam" ] }
{ "_id" : ObjectId("5ea3f5d304263e90dac943f1"), "ListOfNames" : [ "Jace", "Sam" ] }

3. $in과 정규식을 조합한 쿼리 실행하기

이제 $in 연산자 안에 정규식 패턴을 넣어 배열 필드를 조회해 보겠습니다. 아래 예시에서는 /John//J/라는 두 개의 정규식 패턴을 사용했습니다.

> db.demo675.find({"ListOfNames": {$in:[/John/,/]}});

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

{ "_id" : ObjectId("5ea3f5b404263e90dac943ef"), "ListOfNames" : [ "John", "Chris", "David" ] }
{ "_id" : ObjectId("5ea3f5c804263e90dac943f0"), "ListOfNames" : [ "Bob", "Johnson", "Sam" ] }
{ "_id" : ObjectId("5ea3f5d304263e90dac943f1"), "ListOfNames" : [ "Jace", "Sam" ] }

결과 분석

모든 세 개의 문서가 조회된 이유를 살펴보겠습니다.

  • 첫 번째 문서: John/John/ 패턴과 일치합니다.
  • 두 번째 문서: Johnson/J/ 패턴(J로 시작)과 일치합니다.
  • 세 번째 문서: Jace 역시 /J/ 패턴과 일치합니다.

즉, $in 내부의 정규식은 배열 요소 중 하나라도 패턴에 부합하면 해당 문서를 반환합니다. 대소문자를 구분하지 않으려면 /pattern/ii 옵션 플래그를 추가하면 됩니다.