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") }
相关推荐
码上上班39 分钟前
Mongodb课程
数据库·mongodb
农村小镇哥1 小时前
Oracle中的锁和10704对高级队列锁
数据库·oracle
峥无1 小时前
SQL性能调优:从执行计划看懂索引的使用与失效
数据库·sql
xyj29175964111 小时前
在Trae中配置数据库MCP
数据库·ai·mcp
廋到被风吹走1 小时前
【AI】【Claude】从 Prompt 到 Agent 的完整进阶地图
数据库·人工智能·prompt
数智化管理手记1 小时前
智能财务能替代人工核算吗?智能财务核心功能包含哪些?
大数据·网络·数据库·数据挖掘·精益工程
金智维科技官方2 小时前
DeepSeek接入企业系统:流程自动化新玩法
大数据·数据库·人工智能
小小龙学IT2 小时前
Tigris:下一代无服务器数据库
数据库·云原生·serverless
熊文豪2 小时前
不装中间件的 MySQL→金仓在线迁移:mysql_fdw 全流程,和一个差点漏掉的 emoji
数据库·人工智能·电科金仓
凤山老林2 小时前
ORM 框架性能调优:Spring Boot 下 N+1 查询根因治理、动态 SQL 优化与 Fetch 策略实战
数据库·spring boot·sql