Definition定义
$typeReturns a string that specifies the BSON type of the argument.返回一个字符串,指定参数的BSON类型。$typehas the following operator expression syntax:具有以下运算符表达式语法:{ $type: <expression> }The argument can be any valid expression.参数可以是任何有效的表达式。
Tip
$isNumber-checks if the argument is a number.检查参数是否为数字。$type(Query)(查询) -filters fields based on BSON type.根据BSON类型筛选字段。
Behavior行为
$type
Unlike the 与根据BSON类型匹配数组元素的$type query operator, which matches array elements based on their BSON type, the $type aggregation operator does not examine array elements. $type查询运算符不同,$type聚合运算符不检查数组元素。Instead, when passed an array as its argument, the 相反,当传递一个数组作为其参数时,$type aggregation operator returns the type of the argument, i.e. "array".$type聚合运算符返回参数的类型,即"array"。
If the argument is a field that is missing in the input document, 如果参数是输入文档中缺少的字段,$type returns the string "missing".$type将返回字符串"missing"。
The following table shows the 下表显示了几种常见表达式类型的$type output for several common types of expressions:$type输出:
{ $type: "a" } | "string" |
{ $type: /a/ } | "regex" |
{ $type: 1 } | "double" |
{ $type: Long(627) } | "long" |
{ $type: { x: 1 } } | "object" |
{ $type: [ [ 1, 2, 3 ] ] } | "array" |
Note
In the case of a literal array such as 对于像[ 1, 2, 3 ], enclose the expression in an outer set of array brackets to prevent MongoDB from parsing [ 1, 2, 3 ] as an argument list with three arguments (1, 2, 3). [1,2,3]这样的文字数组,将表达式括在一组外部数组括号中,以防止MongoDB将[1,2,3]解析为具有三个参数(1,2,3)的参数列表。Wrapping the array 将数组[ 1, 2, 3 ] in a $literal expression achieves the same result.[1,2,3]包装在$literal表达式中可以获得相同的结果。
See operator expression syntax forms for more information.有关更多信息,请参阅运算符表达式语法形式。
Available Types可用类型
| Number | Alias | ||
|---|---|---|---|
| 1 | "double" | ||
| 2 | "string" | ||
| Object | 3 | "object" | |
| 4 | "array" | ||
| Binary data | 5 | "binData" | |
| Undefined | 6 | "undefined" | Deprecated. |
| ObjectId | 7 | "objectId" | |
| 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" | Deprecated. |
| 32-bit integer | 16 | "int" | |
| Timestamp | 17 | "timestamp" | |
| 64-bit integer | 18 | "long" | |
| Decimal128 | 19 | "decimal" | |
| Min key | -1 | "minKey" | |
| Max key | 127 | "maxKey" |
If the argument is a field that is missing in the input document, 如果参数是输入文档中缺少的字段,$type returns the string "missing".$type将返回字符串"missing"。
Example示例
This example uses a collection named 此示例使用名为coll with the following documents:coll的集合和以下文档:
{ _id: 0, a : 8 }
{ _id: 1, a : [ 41.63, 88.19 ] }
{ _id: 2, a : { a : "apple", b : "banana", c: "carrot" } }
{ _id: 3, a : "caribou" }
{ _id: 4, a : Long(71) }
{ _id: 5 }
The following aggregation operation uses the 以下聚合操作使用$type operator to display the type of field a for all documents as part of the $project stage.$type运算符显示所有文档的字段a的类型,作为$project阶段的一部分。
db.coll.aggregate([{
$project: {
a : { $type: "$a" }
}
}])
The operation returns the following:该操作返回以下内容:
{ _id: 0, "a" : "double" }
{ _id: 1, "a" : "array" }
{ _id: 2, "a" : "object" }
{ _id: 3, "a" : "string" }
{ _id: 4, "a" : "long" }
{ _id: 5, "a" : "missing" }