문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

$type

이 페이지의 내용

  • 정의
  • 호환성
  • 구문
  • 행동
  • 예제
  • 배열 유형별 쿼리
  • 추가 정보
$type

$typefield 이 지정된 BSON types 의 인스턴스인 문서를 선택합니다. 데이터 유형별 쿼리는 데이터 유형을 예측할 수 없는 고도로 구조화되지 않은 데이터를 처리할 때 유용합니다.

다음 환경에서 호스팅되는 배포에 $type 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

$type 단일 BSON 유형에 대한 표현식의 구문은 다음과 같습니다.

{ field: { $type: <BSON type> } }

BSON 유형의 번호 또는 별칭을 지정할 수 있습니다.

$type 표현식은 BSON 유형의 배열도 받아들일 수 있으며 구문은 다음과 같습니다.

{ field: { $type: [ <BSON type1> , <BSON type2>, ... ] } }

위의 쿼리는 field 값이 나열된 유형 중 하나에 해당하는 문서와 일치합니다. 배열에 지정된 유형은 숫자 또는 문자열 별칭일 수 있습니다.

예제 는 여러 데이터 유형별 쿼리를 참조하세요.

사용 가능한 유형 에서는 BSON 유형과 해당 숫자 및 문자열 별칭에 대해 설명합니다.

다음도 참조하세요.

$typefield 의 BSON types가 $type 에 전달된 BSON types와 일치하는 문서를 반환합니다.

field 가 배열인 문서의 경우 $type 은(는) 하나 이상의 배열 요소가 $type 에 전달된 유형과 일치하는 문서를 반환합니다.

$type: "array" 에 대한 쿼리는 필드 자체가 배열인 문서를 반환합니다.

$type 연산자는 BSON 유형에 해당하는 숫자 외에도 BSON 유형에 대한 문자열 별칭을 허용합니다. [1]

유형
번호
별명
참고 사항
더블
1
"double"
문자열
2
"문자열"
개체
3
"객체"
배열
4
"배열"
이진 데이터
5
"빈데이터"
정의되지 않음
6
"정의되지 않음"
더 이상 사용되지 않습니다.
객체 ID
7
"objectId"
부울
8
"bool"
날짜
9
'날짜'
Null
10
"null"
정규 표현식
11
"정규식"
DB포인터
12
"dbPointer"
더 이상 사용되지 않습니다.
JavaScript
13
"자바 스크립트"
기호
14
"기호"
더 이상 사용되지 않습니다.
32비트 정수
16
"in"
타임스탬프
17
"타임스탬프"
64비트 정수
18
"long"
Decimal128
19
"십진수"
최소 키
-1
" 밍키 "
최대 키
127
"최대 키"

$type 는 다음 BSON types와 일치하는 number 별칭을 지원합니다.

예제를 보려면 예제를 참조하세요 .

[1] MongoDB 4.2부터 사용자는 더 이상 쿼리 필터 $type: 0$exists:false의 동의어로 사용할 수 없습니다. null 또는 누락된 필드를 쿼리하려면 Null 또는 누락된 필드 쿼리를 참조하십시오.

다음도 참조하세요.

MinKeyMaxKey 는 비교 작업에 사용되며 주로 내부용으로 존재합니다. 가능한 모든 BSON 요소 값에 대해 MinKey 은 항상 가장 작은 값이고 MaxKey 는 항상 가장 큰 값입니다.

$type 를 사용하여 minKey 또는 maxKey 를 쿼리하면 특수 MinKey 또는 MaxKey 값과 일치하는 필드만 반환됩니다.

data collection 에 MinKeyMaxKey가 있는 두 개의 문서가 있다고 가정합니다.

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, doublelong 값이 있습니다.

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"] }
] )

다음 쿼리는 zipCodeBSON 유형 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" ] }

다음 쿼리는 zipCodeBSON 유형 double 이거나 지정된 유형의 요소를 포함하는 배열인 모든 문서를 반환합니다.

db.addressBook.find( { zipCode : { $type : 1 } } );
db.addressBook.find( { zipCode : { $type : "double" } } );

이러한 쿼리가 반환됩니다.

{ _id : 2, address : "156 Lunar Place", zipCode : 43339374 }

다음 쿼리는 number 별칭을 사용하여 zipCodeBSON 유형 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, intdouble 값이 있습니다.

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") }
] )

다음 쿼리는 classAverageBSON 유형 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" }

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 필드는 배열입니다.

← $exists