MongoDB聚合运算符:$toDecimal

MongoDB聚合运算符:$toDecimal

文章目录

  • [MongoDB聚合运算符:toDecimal](#MongoDB聚合运算符:toDecimal)

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

语法

js 复制代码
{
   $toDecimal: <expression>
}

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

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

js 复制代码
{ $convert: { input: <expression>, to: "Decimal" } }

使用

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

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

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

示例 结果
{$toDecimal: true} Decimal128("1")
{$toDecimal: false} Decimal128("0")
{$toDecimal: 2.5} Decimal128("2.50000000000000")
{$toDecimal: NumberInt(5)} Decimal128("5")
{$toDecimal: NumberLong(10000)} Decimal128("10000")
{$toDecimal: "-5.5"} Decimal128("-5.5")
{$toDecimal: ISODate("2018-03-27T05:04:47.890Z")} Decimal128("1522127087890")

举例

使用下面的脚本创建orders集合:

js 复制代码
db.orders.insertMany( [
   { _id: 1, item: "apple", qty: 5, price: 10 },
   { _id: 2, item: "pie", qty: 10, price: NumberDecimal("20.0") },
   { _id: 3, item: "ice cream", qty: 2, price: "4.99" },
   { _id: 4, item: "almonds",  qty: 5, price: 5 }
] )

下面的聚合操先orders集合的price转换为decimal,qty转换为整数,然后计算总费用:

js 复制代码
// 定义转换阶段,转换后的price和qyt字段convertedPrice和convertedQty添加到文档

priceQtyConversionStage = {
   $addFields: {
      convertedPrice: { $toDecimal: "$price" },
      convertedQty: { $toInt: "$qty" },
   }
};

//定义计算合计阶段,将convertedPrice和convertedQty相乘得到总计


totalPriceCalculationStage = {
   $project: { item: 1, totalPrice: { $multiply: [ "$convertedPrice", "$convertedQty" ] } }
};

db.orders.aggregate( [
   priceQtyConversionStage,
   totalPriceCalculationStage
] )

执行的结果为:

js 复制代码
{ _id: 1, item: 'apple', totalPrice: Decimal128("50") },
{ _id: 2, item: 'pie', totalPrice: Decimal128("200.0") },
{ _id: 3, item: 'ice cream', totalPrice: Decimal128("9.98") },
{ _id: 4, item: 'almonds', totalPrice: Decimal128("25") }
相关推荐
DashVector39 分钟前
向量检索服务 DashVector产品计费
数据库·数据仓库·人工智能·算法·向量检索
KYGALYX1 小时前
在Linux中备份msyql数据库和表的详细操作
linux·运维·数据库
檀越剑指大厂2 小时前
金仓KReplay:定义数据库平滑迁移新标准
数据库
努力成为一个程序猿.2 小时前
【Flink】FlinkSQL-动态表和持续查询概念
大数据·数据库·flink
毕设十刻3 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
liliangcsdn3 小时前
如何利用约束提示优化LLM在问题转sql的一致性
数据库·sql
Java爱好狂.4 小时前
分布式ID|从源码角度深度解析美团Leaf双Buffer优化方案
java·数据库·分布式·分布式id·es·java面试·java程序员
Elastic 中国社区官方博客4 小时前
通过混合搜索重排序提升多语言嵌入模型的相关性
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
倔强的石头1065 小时前
KingbaseES:从兼容到超越,详解超越MySQL的权限隔离与安全增强
数据库·mysql·安全·金仓数据库
小鸡毛程序员5 小时前
我在CSDN学MYSQL之----数据库基本概念和基本知识(下)
数据库·mysql