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

MongoDB에서 문자열 길이 기준으로 쿼리하는 방법

MongoDB에는 문자열 길이를 직접 비교하는 전용 연산자가 없습니다. 대신 $regex 연산자와 정규식의 반복 범위 지정자를 활용하면 특정 길이 조건에 맞는 문서를 손쉽게 조회할 수 있습니다.

기본 문법

길이 조건으로 쿼리할 때 사용하는 기본 문법은 다음과 같습니다.

db.yourCollectionName.find({ 'yourFieldName': { $regex: /^.{yourLengthValue1,yourLengthValue2}$/ } });

정규식 패턴의 각 구성 요소는 아래와 같은 의미를 가집니다.

  • ^ : 문자열의 시작을 의미합니다.
  • $ : 문자열의 끝을 의미합니다.
  • .{최소길이,최대길이} : 임의의 문자(.)가 지정한 횟수만큼 반복되어야 함을 의미합니다.

예제 컬렉션 생성

실습을 위해 먼저 컬렉션을 만들고 문서를 삽입해 보겠습니다. 다음은 문서를 추가하는 쿼리입니다.

> db.queryLengthDemo.insertOne({"StudentFullName":"John Smith"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9a01ae353decbc2fc927c0")
}
> db.queryLengthDemo.insertOne({"StudentFullName":"John Doe"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9a01b4353decbc2fc927c1")
}
> db.queryLengthDemo.insertOne({"StudentFullName":"David Miller"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9a01c2353decbc2fc927c2")
}
> db.queryLengthDemo.insertOne({"StudentFullName":"Robert Taylor"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9a01e2353decbc2fc927c3")
}
> db.queryLengthDemo.insertOne({"StudentFullName":"Chris Williams"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9a01f1353decbc2fc927c4")
}

저장된 전체 문서 확인

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

> db.queryLengthDemo.find().pretty();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{
   "_id" : ObjectId("5c9a01ae353decbc2fc927c0"),
   "StudentFullName" : "John Smith"
}
{
   "_id" : ObjectId("5c9a01b4353decbc2fc927c1"),
   "StudentFullName" : "John Doe"
}
{
   "_id" : ObjectId("5c9a01c2353decbc2fc927c2"),
   "StudentFullName" : "David Miller"
}
{
   "_id" : ObjectId("5c9a01e2353decbc2fc927c3"),
   "StudentFullName" : "Robert Taylor"
}
{
   "_id" : ObjectId("5c9a01f1353decbc2fc927c4"),
   "StudentFullName" : "Chris Williams"
}

길이 조건으로 문서 조회하기

이제 학생 이름(StudentFullName)의 길이가 9자 이상 12자 이하인 문서만 조회해 보겠습니다.

> db.queryLengthDemo.find({ StudentFullName: { $regex: /^.{9,12}$/ } }).pretty();

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

{
   "_id" : ObjectId("5c9a01ae353decbc2fc927c0"),
   "StudentFullName" : "John Smith"
}
{
   "_id" : ObjectId("5c9a01c2353decbc2fc927c2"),
   "StudentFullName" : "David Miller"
}

결과를 보면 "John Smith"(공백 포함 10자)와 "David Miller"(공백 포함 12자) 두 문서만 반환된 것을 확인할 수 있습니다. 나머지 문서들은 이름 길이가 조건 범위를 벗어나기 때문에 제외되었습니다.

참고 사항

  • 정확히 하나의 길이만 매칭하고 싶다면 /^.{10}$/처럼 단일 숫자를 지정하면 됩니다.
  • 컬렉션 규모가 클 경우 정규식 쿼리는 전체 문서 스캔으로 이어질 수 있으므로, 가능하면 앞부분이 고정된 접두사 패턴과 함께 사용하거나 애플리케이션 단에서 길이를 검증하는 방안도 고려하는 것이 좋습니다.