MongoDB聚合运算符:$toLong

MongoDB聚合运算符:$toLong

文章目录

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

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

语法

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

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

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

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

使用

下表列出了可转换为长整数的类型:

输入类型 规则
Boolean 对于True,返回Long(1),对于False返回Long(0)
Decimal 返回截断值。截断的小数值必须在长整数的最小值和最大值范围内。如果截断值小于最小长整数值或大于最大长整数值,则无法转换
Double 返回截断值。截断的双数值必须在长整数的最小值和最大值范围内。如果截断值小于最小长整数值或大于最大长整数值,则无法转换
Integer 以长整数返回整数值
Long 直接返回
String 将字符串转换为长整数返回,但字符串表示的必须是10进制的长整数比如"-5"、"1233",非10进制的会报错,如:"0x3343"
Date 返回自与日期值对应的纪元以来的毫秒数

下表列出了一些转换为长整数的示例:

示例 结果
$toLong: true Long("1")
$toLong: false Long("0")
$toLong: 1.99999 Long("1")
$toLong: NumberDecimal("5.5000") Long("5")
$toLong: NumberDecimal("9223372036000.000") Error
$toLong: NumberInt(8) Long(8)
$toLong: ISODate("2018-03-26T04:38:28.044Z") Long("1522039108044")
$toLong: "-2" Long("-2")
$toLong: "2.5" Error
$toLong: null null

举例

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

js 复制代码
db.orders.insertMany( [
   { _id: 1, item: "apple", qty: NumberInt(5) },
   { _id: 2, item: "pie", qty: "100" },
   { _id: 3, item: "ice cream", qty: NumberLong("500") },
   { _id: 4, item: "almonds", qty: "50" },
] )

下面的聚合操将qty集转换为长整数,然后进行排序:

js 复制代码
// 定义阶段,将qty转换为长整数

qtyConversionStage = {
   $addFields: {
      convertedQty: { $toLong: "$qty" }
   }
};

// 定义阶段,基于转换后的字段convertedQty进行排序

sortStage = {
   $sort: { "convertedQty": -1 }
};


db.orders.aggregate( [
   qtyConversionStage,
   sortStage
])

执行的结果为:

js 复制代码
{ _id: 3, item: 'ice cream', qty: Long("500"), convertedQty: Long("500") },
{ _id: 2, item: 'pie', qty: '100', convertedQty: Long("100") },
{ _id: 4, item: 'almonds', qty: '50', convertedQty: Long("50") },
{ _id: 1, item: 'apple', qty: 5, convertedQty: Long("5") }
相关推荐
阿杰学AI3 分钟前
AI核心知识129—大语言模型之 向量数据库(简洁且通俗易懂版)
数据库·人工智能·ai·语言模型·自然语言处理·向量数据库·vector database
SPC的存折5 分钟前
D在 Alpine 容器中手动搭建 Discuz 全攻略(包含镜像一键部署脚本,可直接用)
linux·数据库·mysql·缓存
李兆龙的博客11 分钟前
从一到无穷大 #67 大查询根因分析 - 从 PinSQL 到 RCRank
数据库·时序数据库
AgCl2329 分钟前
MYSQL-6-函数与约束-3/17
android·数据库·mysql
junqiduhang35 分钟前
Win11 MySQL 8.0 安装八步走
数据库·mysql
zhangchaoxies40 分钟前
golang如何使用SQLx原生SQL查询_golang SQLx原生SQL查询使用方法
jvm·数据库·python
m0_7436239240 分钟前
mysql如何优化InnoDB缓冲池大小_mysql缓冲池内存调优
jvm·数据库·python
孟意昶42 分钟前
Doris专题31-SQL手册-基础元素
大数据·数据库·数据仓库·分布式·sql·知识图谱·doris
m0_6178814244 分钟前
如何操作 XML 数据_XMLTYPE 与 EXTRACT 函数解析节点
jvm·数据库·python
qq_334563551 小时前
golang如何实现SSTable持久化_golang SSTable持久化实现要点
jvm·数据库·python