-
Type: Improvement
-
Resolution: Done
-
Priority: Major - P3
-
Affects Version/s: None
-
Component/s: Aggregation Framework
-
Fully Compatible
-
Query 11 (03/14/16)
Syntax
{$type: "$fieldName"}
Examples
Input
{_id: NumberLong(4)}
Pipeline
db.coll.aggregate([{
$project: {
_id: {$type: "$_id"}
}
}])
Output
{_id: "long"}
Additional Notes
- Type names will match the query $type operator.
- Note in a query, the $type will try to match elements inside of an array, so a {$type: 'array'} will only match nested arrays. This will not be the case in aggregation. The type of an array will be 'array'.
- Adding a $in expression (
SERVER-6146) and a $switch expression (SERVER-10689) should make it easier to tell if something is numeric.
Original Description
If there was an equivalent of $type field (it can return bson type number or something else) it would be highly useful to do appropriate processing only if a field is a particular type.
For example, without knowing if a field is always an array, it's possible to get an error trying to $unwind or to get $size - if you could
{$project: {typeOfFoo:{$type:"$foo"}}}
you could now do different processing/operations depending on whether type is an array or not, or if it's a string vs number vs date, etc.
- is depended on by
-
CSHARP-1609 provide $projection operator to get type of field
- Closed
- is related to
-
DRIVERS-297 Aggregation Framework Support for 3.4
- Closed
-
SERVER-18210 Add query for document structure
- Closed