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

MongoDB에서 정규식($regex)으로 특정 값을 포함하는 문서 찾는 방법

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 옵션을 생략하면 됩니다.