$type
정의
$type
$type
은field
값 이 지정된 BSON types 의 인스턴스인 문서를 선택합니다. 데이터 유형별 쿼리는 데이터 유형을 예측할 수 없는 고도로 구조화되지 않은 데이터를 처리할 때 유용합니다.
호환성
다음 환경에서 호스팅되는 배포에 $type
사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
구문
단일 BSON 유형에 대한 $type
표현식의 구문은 다음과 같습니다.
{ field: { $type: <BSON type> } }
BSON types번호 또는 별칭을 지정할 수 있습니다.
$type
표현식은 BSON 유형의 배열을 받아들일 수도 있으며 구문은 다음과 같습니다.
{ field: { $type: [ <BSON type1> , <BSON type2>, ... ] } }
위의 쿼리는 field
값이 나열된 유형 중 하나에 해당하는 문서와 일치합니다. 배열에 지정된 유형은 숫자 또는 문자열 별칭일 수 있습니다.
예시는 여러 데이터 유형으로 쿼리하기를 참조하세요.
사용 가능한 유형에서는 BSON types와 해당 숫자 및 문자열 별칭을 설명합니다.
행동
$type
은 field
의 BSON 유형이 $type
에 전달된 BSON 유형과 일치하는 문서를 반환합니다.
배열
field
가 배열인 문서의 경우 $type
은 하나 이상의 배열 요소가 $type
에 전달된 유형과 일치하는 문서를 반환합니다.
$type: "array"
에 대한 쿼리는 필드 자체가 배열인 문서를 반환합니다.
사용 가능한 유형
$type
연산자는 BSON types에 해당하는 숫자 외에도 BSON types에 대한 문자열 별칭을 허용합니다. [1]
유형 | 번호 | 별명 | 참고 사항 |
---|---|---|---|
더블 | 1 | "double" | |
문자열 | 2 | "문자열" | |
개체 | 3 | "객체" | |
배열 | 4 | "배열" | |
이진 데이터 | 5 | "binData" | |
정의되지 않음 | 6 | "정의되지 않음" | 더 이상 사용되지 않습니다. |
ObjectId | 7 | "objectId" | |
부울 | 8 | "bool" | |
날짜 | 9 | '날짜' | |
Null | 10 | "null" | |
정규 표현식 | 11 | "정규식" | |
DB포인터 | 12 | "dbPointer" | 더 이상 사용되지 않습니다. |
JavaScript | 13 | "자바 스크립트" | |
기호 | 14 | "기호" | 더 이상 사용되지 않습니다. |
32비트 정수 | 16 | "in" | |
타임스탬프 | 17 | "타임스탬프" | |
64비트 정수 | 18 | "긴" | |
Decimal128 | 19 | "십진수" | |
최소 키 | - 1 | " 밍키 " | |
최대 키 | 127 | "최대 키" |
$type
(은)는 다음 BSON 유형과 일치하는 number
별칭을 지원합니다.
예를 보려면 예시를 참조하세요.
[1] | 사용자는 더 이상 쿼리 필터 $type: 0 을 $exists:false 의 동의어로 사용할 수 없습니다. null 또는 누락된 필드를 쿼리하려면 null 또는 누락된 필드 쿼리를 참조하세요. |
MinKey 및 MaxKey
MinKey 와 MaxKey 는 비교 작업에 사용되며 주로 내부용으로 존재합니다. 가능한 모든 BSON 요소 값에 대해 MinKey
은 항상 가장 작은 값이고 MaxKey
은 항상 가장 큰 값입니다.
$type
을 사용하여 minKey
또는 maxKey
를 쿼리하면 특수 MinKey
또는 MaxKey
값과 일치하는 필드만 반환됩니다.
data
collection 에 MinKey
와 MaxKey
가 있는 두 개의 문서가 있다고 가정합니다.
db.data.insertMany( [ { _id : 1, x : { "$minKey" : 1 } }, { _id : 2, y : { "$maxKey" : 1 } } ] )
다음 쿼리는 _id: 1
이 포함된 문서를 반환합니다.
db.data.find( { x: { $type: "minKey" } } )
다음 쿼리는 _id: 2
이 포함된 문서를 반환합니다.
db.data.find( { y: { $type: "maxKey" } } )
예제
데이터 유형별 쿼리
addressBook
에는 주소와 우편번호가 포함되어 있으며, zipCode
에는 string
, int
, double
및 long
값이 있습니다.
db.addressBook.insertMany( [ { _id : 1, address : "2030 Martian Way", zipCode : "90698345" }, { _id : 2, address : "156 Lunar Place", zipCode : 43339374 }, { _id : 3, address : "2324 Pluto Place", zipCode : NumberLong(3921412) }, { _id : 4, address : "55 Saturn Ring" , zipCode : NumberInt(88602117) }, { _id : 5, address : "104 Venus Drive", zipCode : ["834847278", "1893289032"] } ] )
다음 쿼리는 zipCode
가 BSON 유형 string
이거나 지정된 유형의 요소를 포함하는 배열인 모든 문서를 반환합니다.
db.addressBook.find( { zipCode : { $type : 2 } } ); db.addressBook.find( { zipCode : { $type : "string" } } );
이러한 쿼리가 반환됩니다.
{ _id : 1, address : "2030 Martian Way", zipCode : "90698345" } { _id : 5, address : "104 Venus Drive", zipCode : [ "834847278", "1893289032" ] }
다음 쿼리는 zipCode
가 BSON 유형 double
이거나 지정된 유형의 요소를 포함하는 배열인 모든 문서를 반환합니다.
db.addressBook.find( { zipCode : { $type : 1 } } ); db.addressBook.find( { zipCode : { $type : "double" } } );
이러한 쿼리가 반환됩니다.
{ _id : 2, address : "156 Lunar Place", zipCode : 43339374 }
다음 쿼리는 number
별칭을 사용하여 zipCode
이 BSON 유형 double
, int
또는 long
이거나 지정된 유형의 요소가 포함된 배열인 문서를 반환합니다.
db.addressBook.find( { zipCode : { $type : "number" } } )
이러한 쿼리가 반환됩니다.
{ _id : 2, address : "156 Lunar Place", zipCode : 43339374 } { _id : 3, address : "2324 Pluto Place", zipCode : NumberLong(3921412) } { _id : 4, address : "55 Saturn Ring", zipCode : 88602117 }
여러 데이터 유형으로 쿼리하기
grades
collection에는 이름과 평균이 포함되어 있습니다. 이 때 classAverage
에는 string
, int
및 double
값이 있습니다.
db.grades.insertMany( [ { _id : 1, name : "Alice King" , classAverage : 87.333333333333333 }, { _id : 2, name : "Bob Jenkins", classAverage : "83.52" }, { _id : 3, name : "Cathy Hart", classAverage: "94.06" }, { _id : 4, name : "Drew Williams" , classAverage : NumberInt("93") } ] )
다음 쿼리는 classAverage
가 BSON 유형 string
또는 double
이거나 지정된 유형의 요소를 포함하는 배열인 모든 문서를 반환합니다. 첫 번째 쿼리는 숫자 별칭을 사용하고 두 번째 쿼리는 문자열 별칭을 사용합니다.
db.grades.find( { classAverage : { $type : [ 2 , 1 ] } } ); db.grades.find( { classAverage : { $type : [ "string" , "double" ] } } );
이러한 쿼리는 다음 문서를 반환합니다.
{ _id : 1, name : "Alice King", classAverage : 87.33333333333333 } { _id : 2, name : "Bob Jenkins", classAverage : "83.52" } { _id : 3, name : "Cathy Hart", classAverage : "94.06" }
MinKey 및 MaxKey로 쿼리하기
restaurants
collection은 낙제 등급인 모든 성적에 대해 minKey
을(를) 사용합니다.
db.restaurants.insertOne( [ { _id: 1, address: { building: "230", coord: [ -73.996089, 40.675018 ], street: "Huntington St", zipcode: "11231" }, borough: "Brooklyn", cuisine: "Bakery", grades: [ { date : new Date(1393804800000), grade : "C", score : 15 }, { date : new Date(1378857600000), grade : "C", score : 16 }, { date : new Date(1358985600000), grade : MinKey(), score : 30 }, { date : new Date(1322006400000), grade : "C", score : 15 } ], name : "Dirty Dan's Donuts", restaurant_id : "30075445" } ] )
그리고 가장 높은 합격 점수인 모든 학년에 대한 maxKey
은(는) 다음과 같습니다.
db.restaurants.insertOne( [ { _id : 2, address : { building : "1166", coord : [ -73.955184, 40.738589 ], street : "Manhattan Ave", zipcode : "11222" }, borough: "Brooklyn", cuisine: "Bakery", grades: [ { date : new Date(1393804800000), grade : MaxKey(), score : 2 }, { date : new Date(1378857600000), grade : "B", score : 6 }, { date : new Date(1358985600000), grade : MaxKey(), score : 3 }, { date : new Date(1322006400000), grade : "B", score : 5 } ], name : "Dainty Daisey's Donuts", restaurant_id : "30075449" } ] )
다음 쿼리는 grades.grade
필드에 minKey
이(가) 포함되거나 지정된 유형의 요소가 포함된 배열인 레스토랑을 반환합니다.
db.restaurants.find( { "grades.grade" : { $type : "minKey" } } )
다음과 같은 결과를 반환합니다.
{ _id : 1, address : { building : "230", coord : [ -73.996089, 40.675018 ], street : "Huntington St", zipcode : "11231" }, borough : "Brooklyn", cuisine : "Bakery", grades : [ { date : ISODate("2014-03-03T00:00:00Z"), grade : "C", score : 15 }, { date : ISODate("2013-09-11T00:00:00Z"), grade : "C", score : 16 }, { date : ISODate("2013-01-24T00:00:00Z"), grade : { "$minKey" : 1 }, score : 30 }, { date : ISODate("2011-11-23T00:00:00Z"), grade : "C", score : 15 } ], name : "Dirty Dan's Donuts", restaurant_id : "30075445" }
다음 쿼리는 grades.grade
필드에 maxKey
이(가) 포함되거나 지정된 유형의 요소가 포함된 배열인 레스토랑을 반환합니다.
db.restaurants.find( { "grades.grade" : { $type : "maxKey" } } )
다음과 같은 결과를 반환합니다.
{ _id : 2, address : { building : "1166", coord : [ -73.955184, 40.738589 ], street : "Manhattan Ave", zipcode : "11222" }, borough : "Brooklyn", cuisine : "Bakery", grades : [ { date : ISODate("2014-03-03T00:00:00Z"), grade : { "$maxKey" : 1 }, score : 2 }, { date : ISODate("2013-09-11T00:00:00Z"), grade : "B", score : 6 }, { date : ISODate("2013-01-24T00:00:00Z"), grade : { "$maxKey" : 1 }, score : 3 }, { date : ISODate("2011-11-23T00:00:00Z"), grade : "B", score : 5 } ], name : "Dainty Daisey's Donuts", restaurant_id : "30075449" }
배열 유형별 쿼리
sensorReading
라는 이름의 컬렉션에 다음 문서가 포함되어 있습니다.
db.sensorReading.insertMany( [ { _id : 1, readings : [ 25, 23, [ "Warn: High Temp!", 55 ], [ "ERROR: SYSTEM SHUTDOWN!", 66 ] ] }, { _id : 2, readings : [ 25, 25, 24, 23 ] }, { _id : 3, readings : [ 22, 24, [] ] }, { _id : 4, readings : [] }, { _id : 5, readings : 24 } ] )
다음 쿼리는 readings
필드가 비어 있거나 비어 있지 않은 배열인 모든 문서를 반환합니다.
db.SensorReading.find( { readings : { $type: "array" } } )
위의 쿼리는 다음과 같은 문서를 반환합니다.
{ _id : 1, readings : [ 25, 23, [ "Warn: High Temp!", 55 ], [ "ERROR: SYSTEM SHUTDOWN!", 66 ] ] }, { _id : 2, readings : [ 25, 25, 24, 23 ] }, { _id : 3, readings : [ 22, 24, [] ] }, { _id : 4, readings : [] }
_id : 1
, _id : 2
, _id : 3
및 _id : 4
가 있는 문서에서 readings
필드는 배열입니다.