MongoDB에서 숫자로만 이루어진 문자열만 조회하는 방법
MongoDB를 사용하다 보면 하나의 필드에 문자가 섞인 값과 순수하게 숫자로만 구성된 값이 뒤섞여 저장되어 있는 경우가 있습니다. 예를 들어 UserId 필드에 "User101"처럼 문자가 포함된 값과 "102"처럼 숫자로만 된 값이 공존할 수 있는데, 이때 정규 표현식(Regular Expression)을 활용하면 숫자 문자열만 간단히 추출할 수 있습니다.
1. 샘플 컬렉션 생성
먼저 테스트에 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다. insertOne() 메서드를 사용하여 문자와 숫자가 혼합된 UserId 값을 차례대로 저장합니다.
> db.selectOnlyNumericDemo.insertOne({"UserId":"User101"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbdb711de8cc557214c0e16")
}
> db.selectOnlyNumericDemo.insertOne({"UserId":"102"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbdb716de8cc557214c0e17")
}
> db.selectOnlyNumericDemo.insertOne({"UserId":"User103"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbdb71dde8cc557214c0e18")
}
> db.selectOnlyNumericDemo.insertOne({"UserId":"104"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cbdb725de8cc557214c0e19")
}2. 전체 문서 확인
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다. pretty() 메서드를 함께 사용하면 결과가 보기 좋게 정렬되어 출력됩니다.
> db.selectOnlyNumericDemo.find().pretty();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5cbdb711de8cc557214c0e16"), "UserId" : "User101" }
{ "_id" : ObjectId("5cbdb716de8cc557214c0e17"), "UserId" : "102" }
{ "_id" : ObjectId("5cbdb71dde8cc557214c0e18"), "UserId" : "User103" }
{ "_id" : ObjectId("5cbdb725de8cc557214c0e19"), "UserId" : "104" }3. 정규 표현식으로 숫자 문자열만 조회하기
MongoDB에서 문자열이 숫자로만 이루어져 있는지 판별하고 해당 문서만 선택하려면 find() 메서드에 정규 표현식 조건을 전달하면 됩니다.
> db.selectOnlyNumericDemo.find({'UserId': /^\d+$/});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5cbdb716de8cc557214c0e17"), "UserId" : "102" }
{ "_id" : ObjectId("5cbdb725de8cc557214c0e19"), "UserId" : "104" }정규 표현식 패턴 해설
위 쿼리에서 사용한 /^\d+$/ 패턴의 각 구성 요소는 다음과 같은 의미를 가집니다.
- ^ : 문자열의 시작 위치를 의미합니다.
- \d+ : 0부터 9 사이의 숫자가 하나 이상 연속으로 나타나야 함을 나타냅니다.
- $ : 문자열의 끝 위치를 의미합니다.
즉, 처음부터 끝까지 오직 숫자로만 구성된 문자열만 매칭 대상이 됩니다. 그래서 "User101", "User103"처럼 문자가 포함된 값은 자동으로 제외되고, "102"와 "104"처럼 순수한 숫자 문자열을 가진 문서만 정확하게 조회됩니다. 이 방식은 데이터 정제, 유효성 검사, 특정 형식의 데이터 마이그레이션 작업 등에서 유용하게 활용할 수 있습니다.