型ブラケットは、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 } } は a 型の int、long、double、または decimal の値と一致します。
型のブラケットと暗黙的な配列トラバーサル
比較が暗黙的に配列を走査する場合にも、型の括弧付けが適用されます。ターゲットフィールドが配列である場合、比較は、少なくとも1つの要素が比較を満たし、かつオペランドと同じ型であるドキュメントと一致します。
例として、{ a: { $gt: 3 } }は{ a: [ 1, 2, 3, 4 ] }と{ a: [ "red", 4, "blue" ] }には一致しますが、{ a: [ "red", "blue" ] }には一致しません。
例
次のコレクションを考えてみましょう。
{ "_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 型であるため、返されません。
Tip
コレクション内のデータ型を強制するには、スキーマ検証を使用します。