MongoDB에서 int 타입 나이 데이터만 조회하기
문서 내 Age 필드에 문자열과 숫자가 혼재되어 있을 때, 정수(int) 타입의 값만 골라내고 싶다면 MongoDB의 $type 연산자를 사용하면 됩니다.
$type은 지정된 BSON 타입과 일치하는 값을 가진 문서만 선택하는 연산자입니다. 예를 들어 $type: "number"를 조건으로 지정하면 해당 필드가 숫자 타입인 문서만 반환됩니다.
1. 테스트 컬렉션 생성
먼저 문자열과 숫자가 섞여 있는 나이 데이터를 가진 컬렉션을 만들어 보겠습니다.
> db.demo470.insertOne({"Age":23});{
"acknowledged" : true,
"insertedId" : ObjectId("5e805456b0f3fa88e2279070")
}
> db.demo470.insertOne({"Age":"Unknown"});{
"acknowledged" : true,
"insertedId" : ObjectId("5e80545cb0f3fa88e2279071")
}
> db.demo470.insertOne({"Age":24});{
"acknowledged" : true,
"insertedId" : ObjectId("5e805461b0f3fa88e2279072")
}
> db.demo470.insertOne({"Age":"Not provided"});{
"acknowledged" : true,
"insertedId" : ObjectId("5e80546bb0f3fa88e2279073")
}위 코드는 총 4개의 문서를 삽입합니다. 이 중 2개는 숫자(23, 24), 나머지 2개는 문자열("Unknown", "Not provided")입니다.
2. 전체 문서 확인
find() 메서드를 사용하면 컬렉션의 모든 문서를 확인할 수 있습니다.
> db.demo470.find();
실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e805456b0f3fa88e2279070"), "Age" : 23 }
{ "_id" : ObjectId("5e80545cb0f3fa88e2279071"), "Age" : "Unknown" }
{ "_id" : ObjectId("5e805461b0f3fa88e2279072"), "Age" : 24 }
{ "_id" : ObjectId("5e80546bb0f3fa88e2279073"), "Age" : "Not provided" }3. $type으로 숫자 타입만 조회
이제 $type 연산자에 "number"를 지정하여, Age 필드가 숫자인 문서만 조회하는 쿼리를 실행합니다.
> db.demo470.find( {'Age' : { $type :"number"} } );실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5e805456b0f3fa88e2279070"), "Age" : 23 }
{ "_id" : ObjectId("5e805461b0f3fa88e2279072"), "Age" : 24 }참고 사항
MongoDB에서 $type: "number"는 int, long, double 등 모든 숫자 계열 BSON 타입을 포함합니다. 만약 정수(int)만 엄격하게 구분하고 싶다면 별칭 대신 숫자 코드를 사용할 수 있습니다. 예를 들어 $type: "int"(코드 16)는 32비트 정수만, $type: "long"(코드 18)은 64비트 정수만 매칭합니다.
이처럼 스키마가 유연한 MongoDB에서는 데이터 타입이 필드마다 다를 수 있으므로, $type 연산자를 활용하면 원하는 타입의 데이터만 손쉽게 필터링할 수 있습니다.