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

MongoDB에서 특정 문자로 시작하는 이름·이메일 필드를 'like' 방식으로 쿼리하는 방법

MongoDB에서 SQL의 LIKE 연산자와 유사한 부분 일치 검색을 구현하려면 정규 표현식(Regular Expression)을 사용해야 합니다. 슬래시(/) 사이에 찾고자 하는 특정 문자를 넣으면 됩니다. 예를 들어 다음과 같습니다.

/J/

특정 문자로 시작하는 값을 찾으려면 앵커(^)를 함께 사용하여 /^J/ 형태로 작성하면 더욱 정확한 결과를 얻을 수 있습니다.

샘플 데이터 생성

먼저 예제로 사용할 컬렉션과 문서를 생성해 보겠습니다.

> db.demo554.insertOne({"UserName":"John","UserMailId":"John@gmail.com"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e8f1cfed1d72c4545cb8679")
}
> db.demo554.insertOne({"UserName":"Chris","UserMailId":"Chris@gmail.com"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e8f1d0cd1d72c4545cb867a")
}
> db.demo554.insertOne({"UserName":"Jace","UserMailId":"Jace@gmail.com"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e8f1d1cd1d72c4545cb867b")
}

전체 문서 조회하기

find() 메서드를 사용하여 컬렉션의 모든 문서를 확인합니다.

> db.demo554.find();

위 명령은 다음과 같은 결과를 출력합니다.

{ "_id" : ObjectId("5e8f1cfed1d72c4545cb8679"), "UserName" : "John", "UserMailId" : "John@gmail.com" }
{ "_id" : ObjectId("5e8f1d0cd1d72c4545cb867a"), "UserName" : "Chris", "UserMailId" : "Chris@gmail.com" }
{ "_id" : ObjectId("5e8f1d1cd1d72c4545cb867b"), "UserName" : "Jace", "UserMailId" : "Jace@gmail.com" }

'like' 구현 쿼리 실행하기

다음은 $or 연산자와 정규 표현식을 조합하여 UserName 또는 UserMailId 필드에 "J"가 포함된 문서를 검색하는 쿼리입니다.

> db.demo554.find({
...    "$or": [
...       { "UserName": /J/ },
...       { "UserMailId": /J/ }
...    ]
... });

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

{ "_id" : ObjectId("5e8f1cfed1d72c4545cb8679"), "UserName" : "John", "UserMailId" : "John@gmail.com" }
{ "_id" : ObjectId("5e8f1d1cd1d72c4545cb867b"), "UserName" : "Jace", "UserMailId" : "Jace@gmail.com" }

"J"가 포함된 John과 Jace의 문서만 반환되었으며, 해당 문자가 없는 Chris의 문서는 제외된 것을 확인할 수 있습니다.

추가 팁

대소문자 구분 없이 검색하기

정규 표현식 뒤에 i 옵션을 추가하면 대소문자를 구분하지 않고 검색할 수 있습니다.

{ "UserName": /J/i }

문자열 시작 위치 고정하기

/J/는 문자열 어디든 "J"가 포함되어 있으면 매칭됩니다. 오직 특정 문자로 시작하는 값만 찾으려면 캐럿(^) 앵커를 사용하세요.

{ "UserName": /^J/ }

또한 인덱스가 설정된 필드에 /^J/처럼 접두사 앵커를 사용하면 MongoDB가 인덱스를 효율적으로 활용할 수 있어 검색 성능 면에서도 유리합니다.