Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / / /

$type

이 페이지의 내용

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

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

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

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

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

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

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

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

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

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

예시는 여러 데이터 유형으로 쿼리하기를 참조하세요.

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

다음도 참조하세요.

$typefield의 BSON 유형이 $type에 전달된 BSON 유형과 일치하는 문서를 반환합니다.

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

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

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

유형
번호
별명
참고 사항

Double

1

"double"

문자열

2

"문자열"

객체

3

"객체"

배열

4

"배열"

이진 데이터

5

"binData"

정의되지 않음

6

"정의되지 않음"

더 이상 사용되지 않습니다.

ObjectId

7

"objectId"

부울

8

"bool"

날짜

9

'날짜'

Null

10

"null"

정규 표현식

11

"정규식"

DB포인터

12

"dbPointer"

더 이상 사용되지 않습니다.

JavaScript

13

"javascript"

기호

14

"기호"

더 이상 사용되지 않습니다.

32비트 정수

16

"in"

타임스탬프

17

"타임스탬프"

64비트 정수

18

"long"

Decimal128

19

"십진수"

Min key

-1

" 밍키 "

최대 키

127

"최대 키"

$type(은)는 다음 BSON 유형과 일치하는 number 별칭을 지원합니다.

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

[1] 사용자는 더 이상 쿼리 필터 $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