MongoDB에서 특정 문자열이나 값을 포함하는 문서를 조회하려면 $regex 연산자를 사용하면 됩니다. 정규식 기반 검색은 부분 일치(partial match) 조건으로 데이터를 찾을 때 매우 유용합니다.
1. 샘플 컬렉션 생성하기
먼저 테스트에 사용할 컬렉션과 문서를 생성해 보겠습니다. insertOne() 메서드를 사용하여 학생 이름(StudentName) 데이터를 차례로 삽입합니다.
> db.demo469.insertOne({"StudentName":"John Doe"});{ "acknowledged" : true, "insertedId" : ObjectId("5e80532fb0f3fa88e227906b") }> db.demo469.insertOne({"StudentName":"Chris Brown"});{ "acknowledged" : true, "insertedId" : ObjectId("5e80533ab0f3fa88e227906c") }> db.demo469.insertOne({"StudentName":"John Smith"});{ "acknowledged" : true, "insertedId" : ObjectId("5e805341b0f3fa88e227906d") }> db.demo469.insertOne({"StudentName":"Jace Doe"});{ "acknowledged" : true, "insertedId" : ObjectId("5e805347b0f3fa88e227906e") }> db.demo469.insertOne({"StudentName":"David Miller"});{ "acknowledged" : true, "insertedId" : ObjectId("5e80534eb0f3fa88e227906f") }2. find()로 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.demo469.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5e80532fb0f3fa88e227906b"), "StudentName" : "John Doe" }{ "_id" : ObjectId("5e80533ab0f3fa88e227906c"), "StudentName" : "Chris Brown" }{ "_id" : ObjectId("5e805341b0f3fa88e227906d"), "StudentName" : "John Smith" }{ "_id" : ObjectId("5e805347b0f3fa88e227906e"), "StudentName" : "Jace Doe" }{ "_id" : ObjectId("5e80534eb0f3fa88e227906f"), "StudentName" : "David Miller" }3. $regex를 사용한 특정 값 검색
이제 'john'이라는 단어가 포함된 문서만 조회해 보겠습니다. $regex와 함께 $options: 'i' 옵션을 지정하면 대소문자를 구분하지 않는(case-insensitive) 검색이 가능합니다.
> db.demo469.find({'StudentName': {'$regex':'john', '$options':'i'}});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e80532fb0f3fa88e227906b"), "StudentName" : "John Doe" }{ "_id" : ObjectId("5e805341b0f3fa88e227906d"), "StudentName" : "John Smith" }주요 포인트 정리
- $regex: 필드 값 안에서 정규식 패턴과 일치하는 부분이 있는지 확인합니다. 위 예시처럼 패턴만 지정하면 해당 문자열이 어디든 포함되어 있으면 일치합니다.
- $options: 'i': 대소문자를 구분하지 않도록 설정합니다. 소문자 'john'으로 검색했지만 'John Doe'와 'John Smith'가 모두 결과에 포함된 이유입니다.
- 대소문자 구분이 필요하다면 $options 옵션을 생략하면 됩니다.