此版本的文档已存档,不再提供支持。要升级5.0部署,请参阅 MongoDB 6.0升级程序。
定义
行为
下表列出了可转换为 double 的输入类型:
| 输入类型 | 行为 | 
|---|---|
| 布尔 | Returns  0forfalse.Returns  1fortrue. | 
| double | 不操作。返回 double。 | 
| Decimal 数据类型 | 以 double 形式返回该十进制值。 该十进制值必须介于 double 的最小值与最大值范围之间。 如果某一十进制值的值小于最小 double 值或大于最大 double 值,则无法转换该十进制值。 | 
| 整型 | 以 double 形式返回该 int 值。 | 
| Long | 以 double 形式返回该 long 值。 | 
| 字符串 | 以 double 形式返回该字符串的数值。 该字符串值必须是以 10 为基数的数值(例如  无法转换不以 10 为基数的字符串值(例如 | 
| Date | 返回日期值对应的纪元起的毫秒数。 | 
下表列出了转换为 double 的部分示例:
| 例子 | 结果 | 
|---|---|
| 
 | 1 | 
| 
 | 0 | 
| 
 | 2.5 | 
| 
 | 5 | 
| 
 | 10000 | 
| 
 | - 5.5 | 
| 
 | 1522127087890 | 
例子
使用以下文档创建集合 weather:
db.weather.insertMany( [    { _id: 1, date: new Date("2018-06-01"), temp: "26.1C" },    { _id: 2,  date: new Date("2018-06-02"), temp: "25.1C" },    { _id: 3,  date: new Date("2018-06-03"), temp: "25.4C" }, ] ) 
以下针对 weather 集合的聚合操作会解析 temp 值并将其转换为 double:
// Define stage to add degrees field with converted value tempConversionStage = {    $addFields: {       degrees: { $toDouble: { $substrBytes: [ "$temp", 0, 4 ] } }    } }; db.weather.aggregate( [    tempConversionStage, ] ) 
该操作将返回以下文档:
{ "_id" : 1, "date" : ISODate("2018-06-01T00:00:00Z"), "temp" : "26.1C", "degrees" : 26.1 } { "_id" : 2, "date" : ISODate("2018-06-02T00:00:00Z"), "temp" : "25.1C", "degrees" : 25.1 } { "_id" : 3, "date" : ISODate("2018-06-03T00:00:00Z"), "temp" : "25.4C", "degrees" : 25.4 } 
注意
如果转换操作遇到错误,聚合操作会停止并抛出错误。要覆盖此行为,请改为使用 $convert。