유형 브래키팅(Type bracketing)은 MongoDB가 쿼리 조건자에 적용하는 암시적 필터입니다. 즉, 특정 BSON 유형에 대한 비교는 해당 유형의 값과만 일치합니다. 예를 들어, { a: { $gt: 0 } } 은 "a 은 숫자이고 a 는 보다 크다"를 0의미합니다.
어떤 연산자 유형 괄호
부등호 연산자($gt, $gte, $lt 및 $lte)는 유형 브래키팅을 사용합니다.
부정($ne 및 $nin)은 유형 브래키팅을 사용하지 않습니다. 모든 유형의 값과 일치합니다. 예시, { a: { $ne: 2 } }은 비교의 숫자 유형 외에도 a이 string 또는 객체인 문서와도 일치합니다.
숫자와의 비교를 위한 유형 브래키팅
BSON에는 int, long, double, decimal과 같은 여러 숫자 유형이 있습니다. MongoDB는 비교를 위해 이를 동일하게 처리하므로 숫자에 대한 비교는 모든 숫자 유형의 값과 일치합니다.
예를 들어, { a: { $gt: 0 } }은(는) int, long, double 또는 decimal 유형의 a 값과 일치합니다.
유형 브래키팅 및 암시적 배열 순회
비교가 배열을 암시적으로 탐색할 때도 유형 브래키팅이 적용됩니다. 대상 필드가 배열인 경우, 비교는 적어도 하나의 요소가 비교를 충족하고 피연산자와 동일한 유형인 문서를 일치시킵니다.
예시로, { a: { $gt: 3 } }은(는) { a: [ 1, 2, 3, 4 ] } 및 { a: [ "red", 4, "blue" ] }와(과) 일치하지만 { a: [ "red", "blue" ] }과는 일치하지 않습니다.
예시
다음 collection을 고려해 보세요.
{ "_id": "apples", "qty": 5 } { "_id": "bananas", "qty": 7 } { "_id": "apricots", "qty": 3 } { "_id": "oranges", "qty": { "in stock": 8, "ordered": 12 } } { "_id": "avocados", "qty": "fourteen" }
다음 쿼리는 $gt를 사용하여 qty의 값이 4보다 큰 문서를 반환합니다.
db.inventory.find( { qty: { $gt: 4 } } )
[ { _id: 'apples', qty: 5 }, { _id: 'bananas', qty: 7 } ]
_id가 "apricots" 인 문서는 qty 값인 3이(가) 4보다 크지 않기 때문에 반환되지 않습니다.
_id가 "avocados" 인 문서는 qty 값이 string 유형이고 $gt 피연산자가 integer 유형이기 때문에 반환되지 않습니다.
_id가 "oranges"인 문서는 qty 값이 object 유형이므로 반환되지 않습니다.
팁
collection에 데이터 유형을 적용하려면 스키마 유효성 검사를 사용하세요.