$convert
¶版本4.0中的新功能。
将值转换为指定的类型。
$convert
具有以下语法:
该$convert
文件包含以下字段:
领域 | 描述 | |||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
input |
参数可以是任何有效的表达式。有关表达式的更多信息,请参见表达式。 | |||||||||||||||||||||||||||
to |
该参数可以是任何可解析为以下数字或字符串标识符之一的有效表达式:
|
|||||||||||||||||||||||||||
onError |
可选的。在转换过程中遇到错误时返回的值,包括不支持的类型转换。参数可以是任何有效的表达式。 如果未指定,则操作在遇到错误时将引发错误并停止。 |
|||||||||||||||||||||||||||
onNull |
可选的。如果 如果未指定, |
除之外$convert
,当默认的“ onError”和“ onNull”行为可以接受时,MongoDB还提供以下聚合运算符作为速记:
下表列出了可以转换为布尔值的输入类型:
输入类型 | 行为 |
---|---|
布尔型 | 没事 返回布尔值。 |
双 | 如果不为零,则返回true。
如果为零,则返回false。
|
小数 | 如果不为零,则返回true。
如果为零,则返回false。
|
整数 | 如果不为零,则返回true。
如果为零,则返回false。
|
长 | 如果不为零,则返回true。
如果为零,则返回false。
|
对象编号 | 返回true。
|
串 | 返回true。
|
日期 | 返回true。
|
下表列出了一些转换为布尔值的示例:
例 | 结果 |
---|---|
真正 | |
假 | |
真正 | |
真正 | |
假 | |
真正 | |
真正 | |
真正 | |
真正 | |
真正 | |
空值 |
也可以看看
下表列出了可以转换为整数的输入类型:
输入类型 | 行为 |
---|---|
布尔型 | 返回
0 的 false 。返回
1 的true 。 |
双 | 返回截断值。 截断后的double值必须在整数的最小值和最大值之内。 您不能转换其截断值小于最小整数值或大于最大整数值的double值。 |
小数 | 返回截断值。 截断的十进制值必须在整数的最大值和最小值之内。 您不能转换截断值小于最小整数值或大于最大整数值的十进制值。 |
整数 | 没事 返回整数值。 |
长 | 以整数形式返回long值。 long值必须落在整数的最小值和最大值之间。 您不能转换小于最小整数值或大于最大整数值的长值。 |
串 | 以整数形式返回字符串的数值。 字符串值必须是基10的整数(例如
你不能转换的浮子或十进制或非基本的字符串值10的数目(例如 |
下表列出了一些转换为整数的示例:
例 | 结果 |
---|---|
1个 | |
0 | |
1个 | |
5 | |
错误 | |
“无法转换为整数类型。” | |
5000 | |
错误 | |
-2 | |
错误 | |
空值 |
也可以看看
$toInt
操作员。
下表列出了可以转换为十进制的输入类型:
输入类型 | 行为 |
---|---|
布尔型 | 返回
NumberDecimal("0") 的 false 。返回
NumberDecimal("1") 的true 。 |
双 | 返回双精度值作为十进制数。 |
小数 | 没事 返回小数。 |
整数 | 以整数形式返回int值。 |
长 | 返回long值(十进制)。 |
串 | 以十进制形式返回字符串的数值。 字符串值必须是基的10数字值(例如
您不能转换非以10为基数的字符串值
(例如 |
日期 | 返回自与日期值对应的纪元以来的毫秒数。 |
下表列出了一些转换为十进制的示例:
例 | 结果 |
---|---|
NumberDecimal(“ 1”) | |
NumberDecimal(“ 0”) | |
NumberDecimal(“ 2.50000000000000”) | |
NumberDecimal(“ 5”) | |
NumberDecimal(“ 10000”) | |
NumberDecimal(“-5.5”) | |
NumberDecimal(“ 1522127087890”) |
也可以看看
下表列出了可以转换为双精度型的输入类型:
输入类型 | 行为 |
---|---|
布尔型 | 返回的NumberLong(0)
false 。返回的NumberLong(1)
true 。 |
双 | 没事 返回双精度型。 |
小数 | 以双精度值返回十进制值。 十进制值必须在两倍的最小值和最大值之内。 您不能转换一个小于最小双精度值或大于最大双精度值的十进制值。 |
整数 | 以双精度值返回int值。 |
长 | 将long值作为双精度值返回。 |
串 | 以双精度值形式返回字符串的数值。 字符串值必须是基的10数字值(例如
您不能转换非以10为底的
数字的字符串值(例如 |
日期 | 返回自与日期值对应的纪元以来的毫秒数。 |
下表列出了一些转换为双重示例的示例:
例 | 结果 |
---|---|
1个 | |
0 | |
2.5 | |
5 | |
10000 | |
-5.5 | |
50000000000 | |
“无法转换为double类型。” | |
1522127087890 |
也可以看看
下表列出了可以转换为long的输入类型:
输入类型 | 行为 |
---|---|
布尔型 | 返回
0 的 false 。返回
1 的true 。 |
双 | 返回截断值。 截断后的double值必须长时间处于最小值和最大值之间。 您不能转换其截断值小于最小长整型值或大于最大长整型值的双精度值。 |
小数 | 返回截断值。 截断的十进制值必须长时间落在最小值和最大值之间。 您不能转换截断值小于最小长整数值或大于最大长整数值的十进制值。 |
整数 | 返回整数值long。 |
长 | 没事 返回long值。 |
串 | 返回字符串的数值。 字符串值必须是基的10长(例如
你不能转换的浮子或十进制或非基本的字符串值10的数目(例如 |
日期 | 将“日期”转换为自纪元以来的毫秒数。 |
下表列出了一些到长示例的转换:
例 | 结果 |
---|---|
NumberLong(“ 1”) | |
NumberLong(“ 0”) | |
NumberLong(“ 1”) | |
数字长(“ 5”) | |
错误 | |
“无法转换为long类型。” | |
数字长(8) | |
数字长(“ 1522039108044”) | |
NumberLong(“-2”) | |
错误 | |
空值 |
也可以看看
下表列出了可以转换为日期的输入类型:
输入类型 | 行为 |
---|---|
双 | 返回一个与截断的double值表示的毫秒数相对应的日期。 正数对应于自1970年1月1日以来的毫秒数。 负数对应于1970年1月1日之前的毫秒数。 |
小数 | 返回与截断的十进制值表示的毫秒数相对应的日期。 正数对应于自1970年1月1日以来的毫秒数。 负数对应于1970年1月1日之前的毫秒数。 |
长 | 返回与long值表示的毫秒数相对应的日期。 正数对应于自1970年1月1日以来的毫秒数。 负数对应于1970年1月1日之前的毫秒数。 |
串 | 返回与日期字符串相对应的日期。 该字符串必须是有效的日期字符串,例如:
|
对象编号 | 返回对应于ObjectId时间戳的日期。 |
下表列出了一些转换日期的示例:
例 | 结果 |
---|---|
ISODate(“ 1973-10-20T21:20:00Z”) | |
ISODate(“ 2009-09-19T14:53:56Z”) | |
ISODate(“ 2004-11-09T11:33:20Z”) | |
ISODate(“ 1935-02-22T12:26:40Z”) | |
ISODate(“ 2018-03-27T04:08:58Z”) | |
ISODate(“ 2018-03-03T00:00:00Z”) | |
ISODate(“ 2018-03-20T06:00:06Z”) | |
错误 | |
“无法转换为日期类型。” |
也可以看看
$toDate
操作员, $dateFromString
下表列出了可以转换为ObjectId的输入类型:
输入类型 | 行为 |
---|---|
串 | 返回长度为24的十六进制字符串的ObjectId。 您不能转换不是长度为24的十六进制字符串的字符串值。 |
下表列出了一些转换日期的示例:
例 | 结果 |
---|---|
ObjectId(“ 5ab9cbfa31c2ab715d42129e”) | |
错误 | |
“无法转换为ObjectId类型。” |
也可以看看
$toObjectId
操作员。
下表列出了可以转换为字符串的输入类型:
输入类型 | 行为 |
---|---|
布尔型 | 以字符串形式返回布尔值。 |
双 | 返回双精度值作为字符串。 |
小数 | 以字符串形式返回十进制值。 |
整数 | 以字符串形式返回整数值。 |
长 | 以字符串形式返回long值。 |
对象编号 | 以十六进制字符串形式返回ObjectId值。 |
串 | 没事 返回字符串值。 |
日期 | 以字符串形式返回日期。 |
下表列出了一些转换为字符串的示例:
例 | 结果 |
---|---|
“真正” | |
“假” | |