MongoDB聚合运算符:$toDouble

本文详细介绍了MongoDB中的$toDouble聚合运算符,用于将指定值转换为Double类型,通过实例展示了如何在weather集合中将temp字段的温度值转换为度数并添加新字段。
摘要由CSDN通过智能技术生成

MongoDB聚合运算符:$toDouble


$toDouble聚合运算符将指定的值转换为Double类型。如果指定的值为空或缺失,则返回null;如果值无法被转换为Double,则报错。

语法

{
   $toDouble: <expression>
}

$toDouble接受任何有效的表达式。

$toDouble$convert表达式的简写形式:

{ $convert: { input: <expression>, to: "double" } }

使用

下表列出了可转换为布尔值的类型:

输入类型规则
Boolean对于True,返回1,对于False返回0
Decimal以Double返回Decimal的值,Decimal的值必须在Double的范围内,超出Double值域范围的Decimal不能转换
Double原样返回
Integer以Double返回整数值
Long以Double返回Long值
String将字符串转换为Double返回,但字符串表示的必须是10进制的比如"-5.5"、“1233”,非10进制的会报错,如:“0x3343”
Date返回自与日期值对应的纪元以来的毫秒数

下表列出了一些转换为布尔值的示例:

示例结果
{$toDouble: true}1
{$toDouble: false}0
{$toDouble: 2.5}2.5
{$toDouble: NumberInt(5)}5
{$toDouble: NumberLong(10000)}10000
{$toDouble: "-5.5"}-5.5
{$toDouble: ISODate("2018-03-27T05:04:47.890Z")}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 }
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原子星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值