$type¶
Definition¶
-
$type
¶ $type
selects the documents where the value of thefield
is an instance of the specified BSON type(s). Querying by data type is useful when dealing with highly unstructured data where data types are not predictable.A
$type
expression for a single BSON type has the following syntax:Changed in version 3.2.
You can specify either the number or alias for the BSON type
The
$type
expression can also accept an array of BSON types and has the following syntax:The above query will match documents where the
field
value is any of the listed types. The types specified in the array can be either numeric or string aliases.See Querying by Multiple Data Type for an example.
Available Types describes the BSON types and their corresponding numeric and string aliases.
See also
If you wish to obtain the BSON type returned by an operator expression rather than filtering documents by their BSON type, use the
$type
aggregation operator.
Behavior¶
$type
returns documents where the BSON type of the field
matches the BSON type passed to $type
.
Changed in version 3.6.
$type
now works with arrays in the same way it works with
other BSON types. Previous versions only matched documents where the
field
contained a nested array.
Available Types¶
Changed in version 3.2: $type
operator accepts string aliases for the BSON types
in addition to the numbers corresponding to the BSON types.
Previous versions only accepted the numbers corresponding to the
BSON type.
Type | Number | Alias | Notes |
---|---|---|---|
Double | 1 | “double” | |
String | 2 | “string” | |
Object | 3 | “object” | |
Array | 4 | “array” | |
Binary data | 5 | “binData” | |
Undefined | 6 | “undefined” | Deprecated. |
ObjectId | 7 | “objectId” | |
Boolean | 8 | “bool” | |
Date | 9 | “date” | |
Null | 10 | “null” | |
Regular Expression | 11 | “regex” | |
DBPointer | 12 | “dbPointer” | Deprecated. |
JavaScript | 13 | “javascript” | |
Symbol | 14 | “symbol” | Deprecated. |
JavaScript (with scope) | 15 | “javascriptWithScope” | |
32-bit integer | 16 | “int” | |
Timestamp | 17 | “timestamp” | |
64-bit integer | 18 | “long” | |
Decimal128 | 19 | “decimal” | New in version 3.4. |
Min key | -1 | “minKey” | |
Max key | 127 | “maxKey” |
$type
supports the number
alias, which will match against the
following BSON types:
- double
- 32-bit integer
- 64-bit integer
- decimal
MinKey and MaxKey¶
MinKey
and MaxKey
are used in comparison operations and exist primarily for internal use.
For all possible BSON element values, MinKey
will always be the
smallest value while MaxKey
will always be the greatest value.
Querying for minKey
or maxKey
with $type
will only return fields that match
the special MinKey
or MaxKey
values.
Suppose that the data
collection has two documents
with MinKey
and MaxKey
:
The following query will return the document with _id: 1
:
The following query will return the document with _id: 2
:
Examples¶
Querying by Data Type¶
The addressBook
contains addresses and zipcodes, where
zipCode
has string
, int
, double
, and long
values:
The following queries return all documents where zipCode
is the
BSON type string
:
These queries return:
The following queries return all documents where zipCode
is the
BSON type double
:
These queries return:
The following query uses the number
alias to return documents where
zipCode
is the BSON type double
, int
, or long
:
These queries return:
Querying by Multiple Data Type¶
The grades
collection contains names and averages, where
classAverage
has string
, int
, and double
values:
The following queries return all documents where classAverage
is the
BSON type string
or double
. The first query uses numeric aliases
while the second query uses string aliases.
These queries return the following documents:
Querying by MinKey and MaxKey¶
The restaurants
collection uses minKey
for any grade that is a
failing grade:
And maxKey
for any grade that is the highest passing grade:
The following query returns any restaurant whose grades.grade
field
contains minKey
:
This returns
The following query returns any restaurant whose grades.grade
field
contains maxKey
:
This returns
Querying by Array Type¶
A collection named SensorReading
contains the following documents:
The following query returns any document in which the readings
field is an array, empty or non-empty.
The above query returns the following documents:
In the documents with _id : 1
, _id : 2
, _id : 3
,
and _id : 4
, the readings
field is an array.