$type
On this page本页内容
Definition定义
$type
-
$type
selects documents where the value of the选择field
is an instance of the specified BSON type(s).field
值为指定BSON类型实例的文档。Querying by data type is useful when dealing with highly unstructured data where data types are not predictable.在处理数据类型不可预测的高度非结构化数据时,按数据类型进行查询非常有用。A单个BSON类型的$type
expression for a single BSON type has the following syntax:$type
表达式具有以下语法:{ field: { $type: <BSON type> } }
You can specify either the number or alias for the BSON type您可以指定BSON类型的编号或别名The$type
expression can also accept an array of BSON types and has the following syntax:$type
表达式也可以接受BSON类型的数组,并具有以下语法:{ field: { $type: [ <BSON type1> , <BSON type2>, ... ] } }
The above query will match documents where the上面的查询将匹配field
value is any of the listed types.field
值为任何列出类型的文档。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.可用类型描述BSON类型及其相应的数字和字符串别名。
See also: 另请参阅:
$isNumber
-checks if the argument is a number.检查参数是否为数字。New in MongoDB 4.4MongoDB 4.4中的新增功能$type (Aggregation)
-returns the BSON type of the argument.返回参数的BSON类型。
Behavior行为
$type
returns documents where the BSON type of the 返回field
matches the BSON type passed to $type
.field
的BSON类型与传递给$type
的BSON匹配的文档。
Arrays数组
For documents where 对于field
is an array, $type
returns documents in which at least one array element matches a type passed to $type
.field
为数组的文档,$type
返回至少有一个数组元素与传递给$type
的类型匹配的文档。
Queries for $type: "array"
return documents where the field itself is an array.$type: "array"
的查询返回字段本身是数组的文档。
Available Types可用类型
The $type
operator accepts string aliases for the BSON types in addition to the numbers corresponding to the BSON types. $type
运算符除了接受与BSON类型对应的数字之外,还接受BSON类型的字符串别名。[1]
Number | Alias | ||
---|---|---|---|
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 code with scope | 15 | "javascriptWithScope" | Deprecated in MongoDB 4.4. |
32-bit integer | 16 | "int" | |
Timestamp | 17 | "timestamp" | |
64-bit integer | 18 | "long" | |
Decimal128 | 19 | "decimal" | |
Min key | -1 | "minKey" | |
Max key | 127 | "maxKey" |
$type
supports the 支持number
alias, which will match against the following BSON types:number
别名,该别名将与以下BSON类型匹配:
For examples, see Examples.有关示例,请参阅示例。
[1] | $type: 0 as a synonym for $exists:false . $type:0 作为$exists:false 的同义词。null 或缺少的字段,请参阅查询null 或丢失的字段。 |
See also: 另请参阅:
$isNumber
New in MongoDB 4.4MongoDB 4.4中的新增功能
MinKey and 和MaxKey
MinKey
and MaxKey
are used in comparison operations and exist primarily for internal use. MinKey
和MaxKey
用于比较操作,主要用于内部使用。For all possible BSON element values, 对于所有可能的BSON元素值,MinKey
will always be the smallest value while MaxKey
will always be the greatest value.MinKey
始终是最小值,而MaxKey
始终是最大值。
Querying for 使用minKey
or maxKey
with $type
will only return fields that match the special MinKey
or MaxKey
values.$type
查询MinKey
或MaxKey
将只返回与特殊MinKey
或MaxKey
值匹配的字段。
Suppose that the 假设data
collection has two documents with MinKey
and MaxKey
:data
集合有两个具有MinKey
和MaxKey
的文档:
{ "_id" : 1, x : { "$minKey" : 1 } }
{ "_id" : 2, y : { "$maxKey" : 1 } }
The following query will return the document with 以下查询将返回_id: 1
:_id
为1
的文档:
db.data.find( { x: { $type: "minKey" } } )
The following query will return the document with 以下查询将返回_id: 2
:_id
为2
的文档:
db.data.find( { y: { $type: "maxKey" } } )
Examples实例
Querying by Data Type按数据类型查询
The addressBook
contains addresses and zipcodes, where zipCode
has string
, int
, double
, and long
values:addressBook
包含地址和邮政编码,其中zipCode
有string
、int
、double
和long
值:
db.addressBook.insertMany(
[
{ "_id" : 1, address : "2030 Martian Way", zipCode : "90698345" },
{ "_id" : 2, address: "156 Lunar Place", zipCode : 43339374 },
{ "_id" : 3, address : "2324 Pluto Place", zipCode: NumberLong(3921412) },
{ "_id" : 4, address : "55 Saturn Ring" , zipCode : NumberInt(88602117) },
{ "_id" : 5, address : "104 Venus Drive", zipCode : ["834847278", "1893289032"]}
]
)
The following queries return all documents where 以下查询返回zipCode
is the BSON type string
or is an array containing an element of the specified type:zipCode
是BSON类型string
或是包含指定类型元素的数组的所有文档:
db.addressBook.find( { "zipCode" : { $type : 2 } } );
db.addressBook.find( { "zipCode" : { $type : "string" } } );
These queries return:这些查询返回:
{ "_id" : 1, "address" : "2030 Martian Way", "zipCode" : "90698345" }
{ "_id" : 5, "address" : "104 Venus Drive", "zipCode" : [ "834847278", "1893289032" ] }
The following queries return all documents where 以下查询返回zipCode
is the BSON type double
or is an array containing an element of the specified type:zipCode
是BSON类型double
或是包含指定类型元素的数组的所有文档:
db.addressBook.find( { "zipCode" : { $type : 1 } } )
db.addressBook.find( { "zipCode" : { $type : "double" } } )
These queries return:这些查询返回:
{ "_id" : 2, "address" : "156 Lunar Place", "zipCode" : 43339374 }
The following query uses the 以下查询使用number
alias to return documents where zipCode
is the BSON type double
, int
, or long
or is an array containing an element of the specified types:number
别名返回文档,其中zipCode
是BSON类型double
、int
或long
,或者是包含指定类型元素的数组:
db.addressBook.find( { "zipCode" : { $type : "number" } } )
These queries return:这些查询返回:
{ "_id" : 2, "address" : "156 Lunar Place", "zipCode" : 43339374 }
{ "_id" : 3, "address" : "2324 Pluto Place", "zipCode" : NumberLong(3921412) }
{ "_id" : 4, "address" : "55 Saturn Ring", "zipCode" : 88602117 }
Querying by Multiple Data Type按多种数据类型查询
The grades
collection contains names and averages, where classAverage
has string
, int
, and double
values:grades
集合包含名称和平均值,其中classAverage
具有string
、int
和double
值:
db.grades.insertMany(
[
{ "_id" : 1, name : "Alice King" , classAverage : 87.333333333333333 },
{ "_id" : 2, name : "Bob Jenkins", classAverage : "83.52" },
{ "_id" : 3, name : "Cathy Hart", classAverage: "94.06" },
{ "_id" : 4, name : "Drew Williams" , classAverage : NumberInt("93") }
]
)
The following queries return all documents where 以下查询返回所有文档,其中classAverage
is the BSON type string
or double
or is an array containing an element of the specified types. The first query uses numeric aliases while the second query uses string aliases.classAverage
是BSON类型string
或double
,或者是包含指定类型元素的数组。第一个查询使用数字别名,而第二个查询使用字符串别名。
db.grades.find( { "classAverage" : { $type : [ 2 , 1 ] } } );
db.grades.find( { "classAverage" : { $type : [ "string" , "double" ] } } );
These queries return the following documents:这些查询返回以下文档:
{ "_id" : 1, "name" : "Alice King", "classAverage" : 87.33333333333333 }
{ "_id" : 2, "name" : "Bob Jenkins", "classAverage" : "83.52" }
{ "_id" : 3, "name" : "Cathy Hart", "classAverage" : "94.06" }
Querying by MinKey and MaxKey按MinKey和MaxKey查询
The restaurants
collection uses minKey
for any grade that is a failing grade:restaurants
集合将minKey
用于任何不及格的分数:
{
"_id": 1,
"address": {
"building": "230",
"coord": [ -73.996089, 40.675018 ],
"street": "Huntington St",
"zipcode": "11231"
},
"borough": "Brooklyn",
"cuisine": "Bakery",
"grades": [
{ "date": new Date(1393804800000), "grade": "C", "score": 15 },
{ "date": new Date(1378857600000), "grade": "C", "score": 16 },
{ "date": new Date(1358985600000), "grade": MinKey(), "score": 30 },
{ "date": new Date(1322006400000), "grade": "C", "score": 15 }
],
"name": "Dirty Dan's Donuts",
"restaurant_id": "30075445"
}
And 对于任何通过等级最高的等级,maxKey
for any grade that is the highest passing grade:maxKey
:
{
"_id": 2,
"address": {
"building": "1166",
"coord": [ -73.955184, 40.738589 ],
"street": "Manhattan Ave",
"zipcode": "11222"
},
"borough": "Brooklyn",
"cuisine": "Bakery",
"grades": [
{ "date": new Date(1393804800000), "grade": MaxKey(), "score": 2 },
{ "date": new Date(1378857600000), "grade": "B", "score": 6 },
{ "date": new Date(1358985600000), "grade": MaxKey(), "score": 3 },
{ "date": new Date(1322006400000), "grade": "B", "score": 5 }
],
"name": "Dainty Daisey's Donuts",
"restaurant_id": "30075449"
}
The following query returns any restaurant whose 以下查询返回其grades.grade
field contains minKey
or is an array containing an element of the specified type:grades.grade
字段包含minKey
或是包含指定类型元素的数组的任何餐厅:
db.restaurants.find(
{ "grades.grade" : { $type : "minKey" } }
)
This returns这会返回
{
"_id" : 1,
"address" : {
"building" : "230",
"coord" : [ -73.996089, 40.675018 ],
"street" : "Huntington St",
"zipcode" : "11231"
},
"borough" : "Brooklyn",
"cuisine" : "Bakery",
"grades" : [
{ "date" : ISODate("2014-03-03T00:00:00Z"), "grade" : "C", "score" : 15 },
{ "date" : ISODate("2013-09-11T00:00:00Z"), "grade" : "C", "score" : 16 },
{ "date" : ISODate("2013-01-24T00:00:00Z"), "grade" : { "$minKey" : 1 }, "score" : 30 },
{ "date" : ISODate("2011-11-23T00:00:00Z"), "grade" : "C", "score" : 15 }
],
"name" : "Dirty Dan's Donuts",
"restaurant_id" : "30075445"
}
The following query returns any restaurant whose 以下查询返回grades.grade
field contains maxKey
or is an array containing an element of the specified type:grades.grade
字段包含maxKey
或是包含指定类型元素的数组的任何餐厅:
db.restaurants.find(
{ "grades.grade" : { $type : "maxKey" } }
)
This returns这会返回
{
"_id" : 2,
"address" : {
"building" : "1166",
"coord" : [ -73.955184, 40.738589 ],
"street" : "Manhattan Ave",
"zipcode" : "11222"
},
"borough" : "Brooklyn",
"cuisine" : "Bakery",
"grades" : [
{ "date" : ISODate("2014-03-03T00:00:00Z"), "grade" : { "$maxKey" : 1 }, "score" : 2 },
{ "date" : ISODate("2013-09-11T00:00:00Z"), "grade" : "B", "score" : 6 },
{ "date" : ISODate("2013-01-24T00:00:00Z"), "grade" : { "$maxKey" : 1 }, "score" : 3 },
{ "date" : ISODate("2011-11-23T00:00:00Z"), "grade" : "B", "score" : 5 }
],
"name" : "Dainty Daisey's Donuts",
"restaurant_id" : "30075449"
}
Querying by Array Type按数组类型查询
A collection named 一个名为SensorReading
contains the following documents:SensorReading
的集合包含以下文档:
{
"_id": 1,
"readings": [
25,
23,
[ "Warn: High Temp!", 55 ],
[ "ERROR: SYSTEM SHUTDOWN!", 66 ]
]
},
{
"_id": 2,
"readings": [
25,
25,
24,
23
]
},
{
"_id": 3,
"readings": [
22,
24,
[]
]
},
{
"_id": 4,
"readings": []
},
{
"_id": 5,
"readings": 24
}
The following query returns any document in which the 以下查询返回readings
field is an array, empty or non-empty.readings
字段为空或非空数组的任何文档。
db.SensorReading.find( { "readings" : { $type: "array" } } )
The above query returns the following documents:上述查询返回以下文档:
{
"_id": 1,
"readings": [
25,
23,
[ "Warn: High Temp!", 55 ],
[ "ERROR: SYSTEM SHUTDOWN!", 66 ]
]
},
{
"_id": 2,
"readings": [
25,
25,
24,
23
]
},
{
"_id": 3,
"readings": [
22,
24,
[]
]
},
{
"_id": 4,
"readings": []
}
In the documents with 在_id : 1
, _id : 2
, _id : 3
, and _id : 4
, the readings
field is an array._id:1
、_id:2
、_id:3
和_id:4
的文档中,readings
字段是一个数组。