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

MongoDB에서 대소문자 구분 없이 특정 이름의 문서를 조회하는 방법 ($regex 활용)

MongoDB에서 대소문자 구분 없이 특정 이름의 문서 조회하기

MongoDB에서 대소문자와 관계없이 특정 이름을 가진 문서를 검색하려면 $regex 연산자를 사용하면 됩니다. 이 글에서는 이름이 "David"인 문서를 대소문자 구분 없이 찾는 방법을 실제 예제와 함께 단계별로 살펴보겠습니다.

1. 샘플 데이터 준비하기

먼저 demo700이라는 컬렉션을 생성하고, 다양한 대소문자 조합의 이름 값을 가진 문서들을 삽입합니다.

> db.demo700.insertOne( { details: [ { Name:"david" }]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6e6b1551299a9f98c93ac")
}
> db.demo700.insertOne( { details: [ { Name:"Chris" }]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6e6b9551299a9f98c93ad")
}
> db.demo700.insertOne( { details: [ { Name:"DAVID" }]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6e6bf551299a9f98c93ae")
}
> db.demo700.insertOne( { details: [ { Name:"David" }]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ea6e6c4551299a9f98c93af")
}

2. 전체 문서 확인하기

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

> db.demo700.find();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5ea6e6b1551299a9f98c93ac"), "details" : [ { "Name" : "david" } ] }
{ "_id" : ObjectId("5ea6e6b9551299a9f98c93ad"), "details" : [ { "Name" : "Chris" } ] }
{ "_id" : ObjectId("5ea6e6bf551299a9f98c93ae"), "details" : [ { "Name" : "DAVID" } ] }
{ "_id" : ObjectId("5ea6e6c4551299a9f98c93af"), "details" : [ { "Name" : "David" } ] }

3. 대소문자를 무시하고 이름으로 검색하기

정규식 패턴 뒤에 붙이는 i 옵션(case-insensitive)을 사용하면 대소문자를 구분하지 않고 검색할 수 있습니다. 아래 쿼리에서 /^David$/i 패턴은 "david", "DAVID", "David"처럼 어떤 대소문자 조합이든 모두 매칭합니다.

> db.demo700.find({"details.Name":{$regex:/^David$/i}});

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

{ "_id" : ObjectId("5ea6e6b1551299a9f98c93ac"), "details" : [ { "Name" : "david" } ] }
{ "_id" : ObjectId("5ea6e6bf551299a9f98c93ae"), "details" : [ { "Name" : "DAVID" } ] }
{ "_id" : ObjectId("5ea6e6c4551299a9f98c93af"), "details" : [ { "Name" : "David" } ] }

결과를 보면 "Chris"는 제외되고, 이름이 "David"인 세 개의 문서만 대소문자와 관계없이 모두 반환된 것을 확인할 수 있습니다.

핵심 포인트 정리

  • $regex: MongoDB에서 정규식 기반 문자열 매칭을 수행하는 연산자입니다.
  • /^David$/i: ^와 $ 앵커로 시작과 끝을 고정하여 정확히 "David"와 일치하는 값만 찾으며, 마지막의 i 플래그가 대소문자를 무시합니다.
  • i 옵션을 생략하면 대소문자까지 완전히 일치하는 문서만 반환되므로, 유연한 검색이 필요하다면 반드시 추가해야 합니다.