型のブラケット処理は 、 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 値と一致します。
型のブラケット処理と暗黙的な配列トラバーサル
型のブラケット処理は、比較が配列を暗黙的に走査する場合にも適用されます。ターゲットフィールドが配列の場合、比較は少なくとも 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を使用して、 の値がqty4 より大きいドキュメントを返します。
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
コレクション内のデータ型を強制するには 、スキーマ検証 を使用します。