MongoDB에서 특정 단어를 검색할 때는 정규식(regex)을 활용하면 됩니다. 정규식은 기본적으로 대소문자를 구분하기 때문에, /John/ 패턴은 "John"과 일치하지만 소문자로 된 "john"과는 일치하지 않습니다.
예제 컬렉션 생성
먼저 문서가 포함된 컬렉션을 생성해 보겠습니다.
> db.demo221.insertOne({"Details":{"StudentName":"Chris","StudentAge":21}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3ee15d03d395bdc213472b")
}
> db.demo221.insertOne({"Details":{"StudentName":"John","StudentAge":20}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3ee16503d395bdc213472c")
}
> db.demo221.insertOne({"Details":{"StudentName":"Bob","StudentAge":22}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3ee16b03d395bdc213472d")
}
> db.demo221.insertOne({"Details":{"StudentName":"john","StudentAge":24}});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e3ee17303d395bdc213472e")
}위 컬렉션에는 "Chris", "John", "Bob", 그리고 소문자 "john" 총 네 개의 학생 문서가 저장되어 있습니다.
전체 문서 확인하기
find() 메서드를 사용하면 컬렉션의 모든 문서를 조회할 수 있습니다.
> db.demo221.find();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e3ee15d03d395bdc213472b"), "Details" : { "StudentName" : "Chris", "StudentAge" : 21 } }
{ "_id" : ObjectId("5e3ee16503d395bdc213472c"), "Details" : { "StudentName" : "John", "StudentAge" : 20 } }
{ "_id" : ObjectId("5e3ee16b03d395bdc213472d"), "Details" : { "StudentName" : "Bob", "StudentAge" : 22 } }
{ "_id" : ObjectId("5e3ee17303d395bdc213472e"), "Details" : { "StudentName" : "john", "StudentAge" : 24 } }이름이 "John"인 레코드만 조회하는 쿼리
이제 정규식을 사용해 이름이 정확히 "John"인 레코드만 가져오는 쿼리를 살펴보겠습니다.
> db.demo221.find({"Details.StudentName":/John/});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e3ee16503d395bdc213472c"), "Details" : { "StudentName" : "John", "StudentAge" : 20 } }결과 분석
출력 결과를 보면 대문자 "J"로 시작하는 "John"인 레코드 하나만 반환되었고, 소문자 "john"인 레코드는 제외되었습니다. 이는 MongoDB의 정규식 검색이 기본적으로 대소문자를 구분(case-sensitive)하기 때문입니다.
만약 대소문자를 구분하지 않고 검색하고 싶다면 /john/i처럼 i 옵션(대소문자 무시 플래그)을 추가하면 됩니다. 반대로 대소문자를 엄격하게 구분해야 하는 경우에는 기본 정규식 패턴을 그대로 사용하면 원하는 결과를 얻을 수 있습니다.