MongoDB聚合运算符:$trunc

news/2024/12/23 1:23:31/

MongoDB聚合运算符:$trunc

文章目录

  • MongoDB聚合运算符:$trunc
    • 语法
      • 参数字段
    • 使用
      • 返回的数据类型
      • null, NaN, 和 正/负无穷
    • 举例

$trunc聚合运算符用于将数字截断为整数或指定的小数位。

语法

{ $trunc : [ <number>, <place> ] }

参数字段

  • <numer>:数值类型,可以是任何能够解析为数值的表达式,比如是整数、双精度数、小数或长整数。如果解析为非表达式,则返回错误。
  • <place>:整数,可选字段,可以是任何可被解析为整数的表达式,必须在-20到100之间,也就是:-20< place < 100,如果不指定,缺省值为0。
    • 如果<place>被解析为正整数,$trunc四舍五入到<place>小数位。如:$trunc: [1234.5678, 2]保留两位小数,返回1234.56
    • 如果<place>解析为一个负整数,$trunc使用小数点左边的数字 <place> 进行截取。例如$trunc : [1234.5678, -2]应用到小数点左边的第二位数字 (3) 并返回 1200。如果<place>的绝对值等于或超过小数点左边的位数,则$trunc返回0。例如:$trunc : [ 1234.5678, -5]指定到了小数位左边的第5位,大于小数点左边的数字位数,所以返回0。
    • 如果<place>解析为0,$trunc对小数位右边第一位数字进行截取,返回整数部分。如:$trunc : [1234.5678, 0]返回1234

使用

$trunc不会对截断的数据进行舍入。要将输入值舍入到指定位置,可使用 $round表达式。

返回的数据类型

如果截断到特定的小数位,$trunc返回的数据类型与输入表达式或值的数据类型一致,如果截断到整数位,$trunc返回整数。

null, NaN, 和 正/负无穷

  • 如果第一个参数解析为 null 值或引用缺少的字段,则 $trunc 返回 null
  • 如果第一个参数解析为 NaN,则 $trunc 返回 NaN
  • 如果第一个参数解析为负无穷大或正无穷大,则 $trunc 分别返回负无穷大或正无穷大。

|例子|结果|
|=|-|
|{ $trunc: [ NaN, 1] }|NaN|
|{ $trunc: [ null, 1] }|null|
|{ $trunc : [ Infinity, 1 ] }|Infinity|
|{ $trunc : [ -Infinity, 1 ] }|-Infinity|

举例

使用下面脚本创建samples集合:

db.samples.insertMany([{ _id: 1, value: 19.25 },{ _id: 2, value: 28.73 },{ _id: 3, value: 34.32 },{ _id: 4, value: -45.39 }]
)
  • 下面的聚合返回值截取到小数点后第一位:
db.samples.aggregate([{ $project: { truncatedValue: { $trunc: [ "$value", 1 ] } } }
])

操作返回下面的结果:

{ "_id" : 1, "truncatedValue" : 19.2 }
{ "_id" : 2, "truncatedValue" : 28.7 }
{ "_id" : 3, "truncatedValue" : 34.3 }
{ "_id" : 4, "truncatedValue" : -45.3 }
  • 下面的聚合返回截断到小数点左边的第一位数字的值:
db.samples.aggregate([{ $project: { truncatedValue: { $trunc: [ "$value", -1 ] } } }
])

操作返回下面的结果:

{ "_id" : 1, "truncatedValue" : 10 }
{ "_id" : 2, "truncatedValue" : 20 }
{ "_id" : 3, "truncatedValue" : 30 }
{ "_id" : 4, "truncatedValue" : -40 }
  • 下面的聚合会返阶段为整数的值:
db.samples.aggregate([{ $project: { truncatedValue: { $trunc: [ "$value", 0 ] } } }
])

操作返回下面的结果:

{ "_id" : 1, "truncatedValue" : 19 }
{ "_id" : 2, "truncatedValue" : 28 }
{ "_id" : 3, "truncatedValue" : 34 }
{ "_id" : 4, "truncatedValue" : -45 }

http://www.ppmy.cn/news/1461840.html

相关文章

SSM【Spring SpringMVC Mybatis】—— Spring(一)

目录 1、初识Spring 1.1 Spring简介 1.2 搭建Spring框架步骤 1.3 Spring特性 1.5 bean标签详解 2、SpringIOC底层实现 2.1 BeanFactory与ApplicationContexet 2.2 图解IOC类的结构 3、Spring依赖注入数值问题【重点】 3.1 字面量数值 3.2 CDATA区 3.3 外部已声明be…

关键字详解

1.用于定义访问权限修饰符的关键字 面向对象程序三大特性&#xff1a;封装、继承、多态。 1.1 访问权限符 Java 中主要通过类和访问权限来实现封装&#xff1a; 类可以将数据以及封装数据的方法结合在一起 &#xff0c;更符合人类对事物的认知&#xff0c;而访问权限用来控制…

【一步一步了解Java系列】:了解Java与C语言的运算符的“大同小异”

看到这句话的时候证明&#xff1a;此刻你我都在努力~ 加油陌生人~ 个人主页&#xff1a; Gu Gu Study ​​ 专栏&#xff1a;一步一步了解Java 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努…

BERT for Joint Intent Classification and Slot Filling 论文阅读

BERT for Joint Intent Classification and Slot Filling 论文阅读 Abstract1 Introduction2 Related work3 Proposed Approach3.1 BERT3.2 Joint Intent Classification and Slot Filling3.3 Conditional Random Field 4 Experiments and Analysis4.1 Data4.2 Training Detail…

软件工程期末复习(7)需求过程

需求分析 需求过程 什么是需求过程&#xff1f; 需求过程是用来导出、确认和维护系统需求文档的一组结构化活动。通常&#xff0c;一个良好的需求过程应包括下列活动&#xff1a; 需求提取需求分析和协商需求确认 需求提取 需求提取是通过与客户、系统用户和其他与系统开发相…

Linux的常用指令 和 基础知识穿插巩固(巩固知识必看)

目录 前言 ls ls 扩展知识 ls -l ls -a ls -al cd cd 目录名 cd .. cd ~ cd - pwd 扩展知识 路径 / cp [选项] “源文件名” “目标文件名” mv [选项] “源文件名” “目标文件名” rm 作用 用法 ./"可执行程序名" mkdir rmdir touch m…

QMetaObject 是 Qt 框架中的一个重要类,用于在运行时处理对象的元对象信息

QMetaObject 是 Qt 框架中的一个重要类&#xff0c;用于在运行时处理对象的元对象信息。每个继承自 QObject 的类在 Qt 中都有一个对应的 QMetaObject&#xff0c;用于存储该类的元对象信息&#xff0c;包括类名、父类、信号和槽等。 以下是 QMetaObject 类的一些主要功能和用…

ubuntu24.04安装ros

ubuntu24.04安装ros 踩坑 踩坑 目前安装人数比较少&#xff0c;没有较为详细的博客&#xff0c;参考官网的链接 http://docs.ros.org/en/rolling/Installation/Ubuntu-Install-Debians.html 同时在如下的一步中会找不到网址报错&#xff0c;此时可以参考https://blog.51cto.c…